NSIS检测正在运行的后台进程

时间:2017-05-08 19:24:00

标签: process nsis

我需要能够在我的NSIS安装程序执行时查找后台中的另一个正在运行的进程。必须在新安装程序完成之前终止并卸载此其他进程。

我已尝试使用FindProc插件查找进程以及KillProc插件以终止进程。这些插件中的每一个都不会返回任何结果。

FindProcDLL::FindProc "MyApplication.exe"

KillProcDLL::KillProc "MyApplication.exe"

我也尝试过nsProcess插件,它也不起作用。

nsProcess::_KillProcess "MyApplication.exe" $R0

似乎人们对这些插件取得了成功,但我不知道为什么它在我的场景中不起作用,除非它与后台进程有关。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

我试过的NSIS插件都没有用。他们都不会返回结果(甚至不是0或负数)。我最终只使用以下命令,它没有任何问题。它将简要弹出一个命令窗口,但我可以在我的场景中使用它

ExecWait "TaskKill /IM MyApplication.exe /F"

希望这有助于其他人。

答案 1 :(得分:1)

在不确切知道您正在使用哪个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解压缩到错误的文件夹中。

答案 2 :(得分:0)

显然,您正在尝试查找并终止不受支持的x64进程。你应该检查这个链接 http://nsis.sourceforge.net/Processes_plug-in