2011-12-12 174 views
0

我使用的宏定义here,在Windows 7中,但它始终返回1.NSIS- FindProc始终返回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:如下使用nsProcess从here试过, -

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

这始终显示为空白。我还没有在其他地方宣布$ R0。某处是否有语法错误,或者这在Windows 7上也不起作用?

+0

前两名zip文件的FindProcDLL页面上为我正常工作与官方2.46 ... – Anders

+0

在Windows 7?我已经尝试了官方的NSIS和Unicode版本(包括插件的unicode版本),而且都没有工作。 – Rex

+1

那nsProcess语法必须是错误的,你不能在这样的寄存器中接收数据,删除var并在调用后尝试弹出(请参阅nsProcess.nsh) – Anders

回答

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 
0

你可以尝试这样的事情。

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

在Windows 7上,FindProc不支持2.46的当前版本。 – Rex