Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使此功能在NSIS中实际工作?_Nsis - Fatal编程技术网

如何使此功能在NSIS中实际工作?

如何使此功能在NSIS中实际工作?,nsis,Nsis,我正试图找出我的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

我正试图找出我的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}
Push 'Dism.exe /Online /Enable-Feature /FeatureName:NetFx3'
Push '.NET 3.5'
Call LoggedExec
所以我想把这个因素归结为:

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
然后按如下方式进行命名:

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}
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

请记住,
Push
/
Pop
作用于堆栈(换句话说,后进先出)

从您的代码片段中,您似乎以与推送相同的顺序来推送
LoggedExec
中的参数。相反,如果您推送命令并在日志文本之后,您需要以相反的顺序来推送
Pop

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

;in LoggedExec
pop $1
pop $0

那么,问题是什么?请注意,从您的代码片段中,如果您先按命令,然后按日志文本,则需要按相反顺序弹出
pop$1
然后
pop$0
我想您刚刚回答了我的问题…我可以将其转换为真实答案:)