【问题标题】:WiX close application before uninstall - close open applications messageWiX 在卸载前关闭应用程序 - 关闭打开的应用程序消息
【发布时间】:2012-04-06 23:57:39
【问题描述】:

我有点痛苦。我有一个安装程序正在安装并启动一个托盘图标应用程序(常见的 .exe)

这工作正常,但现在我想在此 UI 告诉用户手动关闭应用程序出现之前停止该应用程序,因为在卸载例程期间,我的托盘图标被删除但进程仍在运行。

我在卸载之前(甚至在卸载期间)应用了这个自定义操作来关闭应用程序

<CustomAction Id="CloseTrayApp" ExeCommand="-exit" FileKey="TrayApp" Execute="immediate" Return="asyncNoWait" />

<InstallExecuteSequence>
    <Custom Action="CloseTrayApp" Before="InstallValidate" />
</InstallExecuteSequence>

但“关闭所有正在运行的应用程序”对话框仍然弹出,但我认为这将解决我的问题。

我已经尝试使用 CloseAction,但由于编译时出错,我急于使用它。它说 WixUtils 命名空间可能丢失,但我仔细检查了它是否存在:

xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"

如何避免弹出对话框并触发该自定义动作执行?

【问题讨论】:

    标签: wix installation


    【解决方案1】:

    您还必须添加对 WixUtilExtension.dll 的引用。如果您使用的是 Visual Studio / Votive,您只需右键单击添加引用并从 [ProgramFilesFolder]Windows Installer XML v3.5\bin 中选择 DLL。否则,您必须使扩展对编译器和链接器可用:

    candle.exe yourfile.wxs -ext %full path to WixUtilExtension.dll%'
    light.exe yourfile.wixobj -ext %full path to WixUtilExtension.dll% –out yourfile.msi yourfile.wixout'
    

    更多信息请访问:

    Using Standard Custom Actions

    请注意,CloseApp 自定义操作有一个限制,它不会“终止”您的应用程序。它只会礼貌地向您的应用发送一条 WM_CLOSE 消息,并由您的托盘应用通过关闭来接收和处理该消息。

    【讨论】:

    • 没有其他方法可以使用自定义操作并传递像“-exit”这样的参数,因为我的程序会对此做出反应并自行终止。我认为之前的语句 Before="InstallValidate" 可能有问题。我可以在较早的情况下连接卸载程序吗?
    • 对不起,我阅读了您的描述,但没有阅读您的代码。看看:wix.sourceforge.net/manual-wix3/util_xsd_closeapplication.htm
    • 该死的它仍然无法正常工作......托盘图标变得不可见但托盘应用程序进程仍在运行...... :(我做错了什么?我正在使用以下closeapp语句:
    • 问题可能出在托盘应用代码中。它必须继承 WM_CLOSE 消息并终止应用程序。听起来它关闭了表单但继续运行。
    • TrayApp 具有讽刺意味的是,我通常会得到相反的行为。如果您终止它,该图标将保留在托盘中,直到您将鼠标悬停在它上面然后消失,尽管该进程早已从任务管理器中消失。+
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2010-10-17
    • 2013-11-11
    相关资源
    最近更新 更多