1

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

然而,我对结果感到困惑。情况如下:

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

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

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

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

4

2 回答 2

0

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

补充几点:

确保您正在对 EXE 和 DLL 进行版本控制。如果旧 DLL 是 1.0.0.0 而新 DLL 是 1.0.0.0,costing 会说“这里无事可做”。

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

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

以下是一些值得阅读的好文章:

InstallValidate FileInUseDialog 系统重新启动

于 2010-10-07T12:15:38.490 回答
0

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

于 2010-10-08T16:56:58.780 回答