【问题标题】:How to get all the processes with a specified name in NSIS installer如何在 NSIS 安装程序中获取具有指定名称的所有进程
【发布时间】:2015-12-16 07:45:38
【问题描述】:

我想杀死从我的安装目录启动的 RunDll32 进程。

所以如果我使用

${nsProcess::KillProcess} "rundll32.exe" $R0

它会杀死系统上所有我不想发生的 rundll32 进程。

IMO,我有两种方法可以解决这个问题, 1. 从命令行参数中识别感兴趣的进程 2.从进程启动目录(当前目录)识别。

我看到很少有插件可以找到该过程,但他们所做的只是返回找到或未找到。相反,我想要进程的 ID 或这些进程的列表,然后我将检查每个进程的命令行或启动目录信息,并将对所需的进程采取行动。

顺便说一句,我检查了以下插件

http://nsis.sourceforge.net/FindProcDLL_plug-in

http://nsis.sourceforge.net/Processes_plug-in

http://forums.winamp.com/showthread.php?t=230998

谢谢

【问题讨论】:

    标签: process installation nsis


    【解决方案1】:

    我通过使用 wmic 查询修复如下:

    StrCpy $1 "wmic Path win32_process where $\"name  like 'Rundll32.exe' and CommandLine like '%$0%'$\" Call Terminate"
    nsExec::Exec $1
    

    【讨论】:

      【解决方案2】:

      如果您控制 .dll,那么最好的选择是提供某种方式以干净的方式关闭应用程序。也许你可以根据它的类名找到一个窗口,然后给它发送一条 WM_CLOSE 消息。

      如果您只需要在升级/卸载期间关闭应用程序,那么LockedList plug-in 比仅仅杀死进程要好得多...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多