在CustomAction中终止进程

时间:2015-07-26 04:40:55

标签: c# windows-installer

我有一个自定义操作安装程序类,我正在捕获以下两个事件:

  1. OnBeforeUninstall
  2. 卸载
  3. 我实际上要做的是,终止我在主应用程序中创建的流程...这个"流程"本质上是我启动的一个exe,它位于系统托盘中,每2分钟向用户显示一次通知。

    当我选择卸载主应用程序时,我会通过以下对话框提示:

    enter image description here

    然而,奇怪的是,在此对话框之后,我在OnBeforeUninstall和Uninstall中输入的代码被解雇

    我不希望这个对话框显示出来。

    我做错了吗?

    根据我的研究,我注意到此对话框来自ORCA中的InstallValidate键。我不知道在此之前安排我的CA是否安全。

    如果没有显示此对话框,是否可以安全地终止我的流程?

2 个答案:

答案 0 :(得分:1)

嗯,经过对谷歌和特定雅虎论坛的大量研究,我需要做的就是通过Orca编辑MSI。

  1. 打开属性表
  2. 添加了 MSIRESTARTMANAGERCONTROL 属性
  3. 将其值设为停用
  4. 摆脱出现的Dialog,我自己的自定义操作代码负责杀死该进程。

    希望这有助于某人。

答案 1 :(得分:0)

您需要等待该流程退出,然后继续卸载 - WaitForExitHasExited

Kill方法异步执行。在调用Kill方法之后,调用WaitForExit方法以等待进程退出,或者检查HasExited属性以确定进程是否已退出。

Process p = ...
p.Kill();
while(!p.HasExited)
{ 
    p.WaitForExit(1000); 
}

在卸载开始前杀死进程 -

public override void Uninstall(System.Collections.IDictionary savedState)
    {
        KillProcess();
        base.Uninstall(savedState);
    }