NSIS KillProcDLL插件 扩展使用

客户端插件KillProcDLL ,用于结束进程。

 

官网文档:https://nsis.sourceforge.io/KillProcDLL_plug-in

 

使用场景

卸载程序时,结束正在运行的应用程序

 

使用示例

KillProcDLL::KillProc "process_name.exe"

为什么要扩展?

使用默认提供的KillProc方法是强制结束进程,这可能导致意外的情况发生,例如数据丢失,程序崩溃等。为了防止上述的情况,我们需要向退出的应用发生指令,让其完成退出所需的正常逻辑动作等,再安全的退出进程。

 

扩展后的插件

增加了2个方法:

SendMessageByHwnd

通过窗口句柄向指定进程发送命令,不推荐使用应该方法,当窗口处于隐藏状态时,使用此方法发送时,应用程序接收不到消息。

使用示例

KillProcDLL::SendMessageByHwnd "process_name.exe" 1

 

SendMessageByMainThreadId

通过窗口句柄向指定进程的主线程发送命令,推荐使用此方法,不受窗口的状态影响。

使用示例

KillProcDLL::SendMessageByMainThreadId "process_name.exe" 1

 

接收方代码示例(以C#,WPF程序为例)

public MainWindow()
{
    //主线程消息过滤器
            ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage;
}

/// <summary>
/// //主线程消息过滤器
/// </summary>
/// <param name="msg"></param>
/// <param name="handled"></param>
private void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled)
{
    if (msg.message == 1)
    {
        //接到消息,执行对应的逻辑
    }
}

 

扩展后的插件源码地址:https://github.com/zhaobangyu/NSIS/tree/PluginCode/KillProcDLL-bin

posted @ 2021-01-11 14:40  独一无二~  阅读(566)  评论(0编辑  收藏  举报