【问题标题】:CloseApplication while uninstalling - wix卸载时关闭应用程序 - wix
【发布时间】:2012-09-21 09:34:46
【问题描述】:

我使用的是 Wix 3.6。我有一个问题,在卸载时如果任何窗口打开并显示在任务栏中(此窗口是我的 msi 的一部分,我正在尝试卸载它),它显示一个对话框,要求用户关闭应用程序(“继续安装前应关闭以下应用程序”)。

我尝试了以下方法,但没有成功。

<InstallExecuteSequence>
       <Custom Action="WixCloseApplications"
                Before="InstallInitialize">Installed</Custom>
       <Custom Action="StartMonitor"
                After="StartServices">NOT Installed</Custom>
    </InstallExecuteSequence>

   <util:CloseApplication Id="CloseMonitor" Target="Monitor.exe"
                           CloseMessage="yes" RebootPrompt="no">
        Installed
    </util:CloseApplication>

我希望 wix 检测应用程序并在卸载过程中关闭它们。无需显示对话框提示。谁能帮我实现它。

使用 /qn 开关从命令提示符安装它可以正常工作,但没有 /qn 开关我得到对话框(“在继续安装之前应关闭以下应用程序”)。 有人可以帮我解决这个问题。

【问题讨论】:

  • 我将 InstallInitialize 更改为 InstallValidate 并且效果很好 已安装

标签: wix close-application


【解决方案1】:

添加C# 自定义事件并在InstallUISequence 上添加使其成为第一个事件并使用以下代码终止进程:

try
{
      Process proc = Process.GetProcessesByName("MyApplication");
      proc.Kill();
}
catch (Exception ex)
{
      MessageBox.Show(ex.Message.ToString()); 
}

如果您的应用程序支持多个实例,则计算编号。首先是实例:

 int count = 0;
 Process[] process = Process.GetProcessesByName("MyApplication");
 foreach (Process pr in process)
 {
   if (pr.MainModule.FileName.Equals(Assembly.GetExecutingAssembly().Location,                StringComparison.OrdinalIgnoreCase))
     {
       count++;

     }
 }

如果您根本不使用DllEntry,请关注此link

【讨论】:

  • 您好,感谢您的建议,
  • 我被要求不要使用C#,所以没有尝试你的建议。
  • 看到 wix 的内置操作或功能非常少,因此您必须使用外部代码。它可以是 c# 或任何其他语言。
  • 我将 InstallInitialize 更改为 InstallValidate 并且效果很好 已安装
  • @sanam_bl 在这种情况下,请回答您自己的问题并接受它。这样以后如果你或其他人提到这个问题可能会知道解决方案
猜你喜欢
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
相关资源
最近更新 更多