NSIS- FindProc始终返回1

时间:2011-12-12 09:52:50

标签: windows nsis

我在Windows 7上使用宏定义的here,但它总是返回1.

这就是我的称呼方式:

!insertmacro FindProc $processFound "MyApp.exe"
MessageBox MB_OK $processFound
IntCmp $processFound ${FindProc_FOUND} +1 +3 +3
MessageBox MB_ICONEXCLAMATION|MB_OK "Please close the app before running this setup." /SD IDOK
Abort

与乱搞WMI相比,这看起来相当简单,并且同一页面上列出的FindProcDLL方法不再起作用(即使是NSIS Unicode版本)。 那么为什么这个方法总会返回1? 我已经单独核实了

tasklist /nh /fi "IMAGENAME eq MyApp.exe"  | find /i "MyApp.exe"

返回1和0,具体取决于应用程序是否正在运行。

更新:我使用的ExecWait结果相同。

更新2 :尝试使用here中的nsProcess,如下所示 -

nsProcess::_FindProcess "myprogram.exe" $R0
MessageBox MB_OK $R0

这总是显示为空白。我没有在其他任何地方宣布$ R0。某处是否存在语法错误,或者这在Windows 7上是否也无效?

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的事情。

FindProcDLL::FindProc "MyApp.exe"
${if} $R0 == 1
MessageBox MB_ICONEXCLAMATION|MB_OK "Killing process now." /SD IDOK
KillProcDLL::KillProc "MyApp.exe"
${EndIf}

答案 1 :(得分:0)

安德斯的帽子提示 - 我忘了弹出函数调用的结果。代码现在有效,看起来像这样:

nsProcess::_FindProcess "UID.EnrolmentClient.exe" $R0
Pop $0
StrCmp $0 "0" +1 +3
MessageBox MB_ICONEXCLAMATION|MB_OK "Please close the application before running this setup." /SD IDOK
Abort