2017-05-08 37 views
0

我需要能夠在執行我的NSIS安裝程序時查找另一個正在運行的進程。在新安裝程序完成之前,必須終止並卸載其他進程。NSIS檢測正在運行的後臺進程

我試過使用FindProc插件來查找過程,還有殺死過程的KillProc插件。這些插件中的每一個都沒有返回任何結果。

FindProcDLL::FindProc "MyApplication.exe"

KillProcDLL::KillProc "MyApplication.exe"

我也試過nsProcess插件,它也不起作用。

nsProcess::_KillProcess "MyApplication.exe" $R0

好像人與這些插件的成功,但是我不知道爲什麼它不在我的情況下工作,除非它是與後臺進程。

任何幫助,將不勝感激。

+0

這個應用程序有什麼特別之處? 64位?以不同的用戶身份運行?服務? – Anders

+0

這是一個32位應用程序。它以與試圖刪除它的用戶相同的用戶身份運行。這是一個在系統托盤中運行的WPF應用程序,因此可能不存在物理窗口。 –

+0

如果它有一個托盤圖標,它必須有一個窗口,但它對插件無關緊要。它是否可以與Notepad.exe等其他應用程序一起使用? – Anders

回答

0

我試過的NSIS插件都沒有工作。他們都不會返回結果(甚至不是0或負數)。我結束了使用下面的命令,它沒有任何問題。它會短暫地彈出一個命令行窗口,但我還好這個在我的情況

ExecWait "TaskKill /IM MyApplication.exe /F"

希望這可以幫助其他人。

0

不知道你正在使用的是哪個NSIS版本,也不知道你是在編譯一個Unicode還是ANSI安裝程序,要說出究竟是怎麼回事有點難。

原始版本from the wiki僅適用於32位進程,hnedka版本也應支持64位進程。

如果您使用的是hnedka版本和NSIS v2.x,那麼您需要將插件從ANSI文件夾提取到\ NSIS \ Plugins。如果您使用的是NSIS v3,則需要從ANSI文件夾提取到\ NSIS \ Plugins \ x86-ansi,並從Unicode文件夾提取到\ NSIS \ Plugins \ x86-unicode。

我可以確認該hnedka版本在NSIS v3中的工作。如果$ R0爲空,那麼您可能將錯誤的插件.dll提取到了錯誤的文件夾。