0

NSISインストーラー全体にあるコードのスニピットを除外しようとしています。スニペットは次のとおりです。

nsExec::ExecToStack 'Dism.exe /Online /Enable-Feature /FeatureName:NetFx3'
Pop $0

${If} $0 != 0
   Pop $0
   Push ".NET 3.5 failed to install: $\n$0"
   Call DetailPrintTS
   StrCpy $Errors "$Errors Errors From .NET 3.5 install:$\n$0$\n$\n"
${EndIf}

したがって、これを次のように因数分解したいと思います。

Function LoggedExec
   Pop $0
   Pop $1

   nsExec::ExecToStack $0
   Pop $0

   ${If} $0 != 0
      Pop $0
      Push "$1 failed to install: $\n$0"
      Call DetailPrintTS
      StrCpy $Errors "$Errors Errors From $1 install:$\n$0$\n$\n"
   ${EndIf}
FunctionEnd

そして、次のように呼び出します。

Push 'Dism.exe /Online /Enable-Feature /FeatureName:NetFx3'
Push '.NET 3.5'
Call LoggedExec

DetailPrintTS は、DetailPrint にタイムスタンプを含む、私が作成した別の関数であることに注意してください。

Function DetailPrintTS
   Pop $7

   ${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6

   DetailPrint "$4:$5:$6 -- $7$\n"
FunctionEnd
4

1 に答える 1

1

Push/がスタックで動作していることを思い出してくださいPop(つまり、lifo: 後入れ先出し)。

あなたのスニペットからPop、引数は編集LoggedExecされたのと同じ順序で表示されているようです。Push代わりに、コマンドとログのテキストの後に、逆の順序にPushする必要があります。Pop

Push 'Dism.exe /Online /Enable-Feature /FeatureName:NetFx3'
Push '.NET 3.5'
Call LoggedExec

;in LoggedExec
pop $1
pop $0
于 2013-03-15T13:20:46.660 に答える