【问题标题】:WiX CloseApplication for exe and dll用于 exe 和 dll 的 WiX CloseApplication
【发布时间】:2010-10-07 08:59:52
【问题描述】:

我根据文章 WiX 3 Tutorial: Understanding main WXS and WXI file 创建了一个 WiX 设置项目,主要是因为它提供了执行应用程序关闭所需的 WiX。

但是,我对结果感到困惑。情况如下:

我们有一个使用 dll 的可执行文件,并创建一个安装可执行文件和 dll 的设置。我们执行设置。

案例 1:接下来,我们更改可执行文件而不是 dll,然后再次创建设置。然后我们启动已安装的应用程序并确保加载了 dll。如果我们现在执行第二个设置,则会显示一个对话框,要求用户按照我们的预期关闭可执行文件。

案例 2:但是如果我们不更改应用程序而只更改 dll,然后在应用程序运行并加载 dll 时执行设置,则不会显示任何对话框。在设置结束时会出现一个对话框,询问我们是否要重新启动计算机。

这是预期的行为吗?在案例 2 中仅更改 dll 时,如何强制案例 1 的应用程序关闭对话框?我不希望用户因为应用程序在无法重新启动的服务器上运行而不得不重新启动计算机。

【问题讨论】:

    标签: wix restart close-application


    【解决方案1】:

    这都是在成本核算过程中由 Windows Installer 确定的。安装程序决定需要安装/更新哪些文件,并计算需要多少磁盘空间以及是否有任何文件锁定。如果有文件锁,它会尝试将锁解析为具有窗口句柄的进程。如果它可以做到这一点,你会得到对话框。如果不能,你就不会。这并不意味着不需要重新启动,只是无法为您提供有关如何避免它的有用信息。

    补充几点:

    确保您正在对 EXE 和 DLL 进行版本控制。如果旧的 DLL 是 1.0.0.0 而新的 DLL 是 1.0.0.0,costing 会说“Nothing to do here”。

    EXE 如何在运行时使用 DLL?在整个过程的生命周期中,它可能根本没有锁定它。

    了解可以通过使用 REBOOT=ReallySuppress 等属性来更改 MSI 的重启行为

    这里有一些值得阅读的好文章:

    InstallValidate FileInUseDialog System Reboots

    【讨论】:

      【解决方案2】:

      我没有检查代码,但我认为发生的事情是 CloseApplication 操作没有运行,因为它看到 exe 没有更改。据我所知,您不能使用 CloseApplication 定位 DLL。如果您使用日志记录运行安装,您应该能够查看是否触发了该操作。我假设您在安装后期有 RemoveExistingProducts 计划,如果您在 InstallValidate 之后移动它,它将每次都删除 exe 并因此触发操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        相关资源
        最近更新 更多