2011-12-12 169 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