如何在wix中停止修复,更新和删除.exe?

时间:2015-07-02 08:56:47

标签: wix windows-installer installer wix3.9

在我的wix中,我使用以下声明:

ServiceControl

我的Repro:

首先,我像往常一样运行我的安装。安装完成后,我启动了我的Web应用程序。 .exe会像往常一样出现在任务管理器中:

enter image description here

我想在修复,更新或卸载时结束此.exe。所以我再次启动我的.msi并选择修复:

enter image description here

现在我的问题:按“修复”后,由于声明了MSI (s) (A8:DC) [10:16:28:227]: Executing op: ActionStart(Name=StopServices,Description=Stopping services,Template=Service: [1]) Action 10:16:28: StopServices. Stopping services MSI (s) (A8:DC) [10:16:28:228]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000) MSI (s) (A8:DC) [10:16:28:228]: Executing op: ServiceControl(,Name=MyProject.exe,Action=2,Wait=1,) MSI (s) (A8:DC) [10:16:28:228]: Executing op: ActionStart(Name=DeleteServices,Description=Deleting services,Template=Service: [1]) Action 10:16:28: DeleteServices. Deleting services MSI (s) (A8:DC) [10:16:28:228]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000) MSI (s) (A8:DC) [10:16:28:229]: Executing op: ServiceControl(,Name=MyProject.exe,Action=8,Wait=1,) MSI (s) (A8:DC) [10:16:28:229]: Executing op: ActionStart(Name=InstallFiles,Description=Copying new files,Template=File: [1], Directory: [9], Size: [6]) [...] MSI (s) (7C:28) [09:06:21:950]: RESTART MANAGER: Did detect that a critical application holds file[s] in use, so a reboot will be necessary. MSI (s) (7C:28) [09:06:21:950]: Note: 1: 1610 MSI (s) (7C:28) [09:06:21:950]: Note: 1: 2205 2: 3: Error MSI (s) (7C:28) [09:06:21:950]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1610 ,我预计会出现以下对话框:

enter image description here

但事实并非如此。而是显示以下对话框:

enter image description here

当我记录设置时,日志显示以下行:

didSelectRowAtIndexPath

在修复旁边,我也尝试了一个结果相同的更新。 也许任何声明丢失? 注意:当我在任务管理器中关闭MyApp.exe时,不会显示该消息,因此MyApp.exe肯定对此问题负责。

2 个答案:

答案 0 :(得分:1)

您应该将整个日志发布到某处。根本原因是修复通常不需要替换文件。因此,如果你真的安装了你的产品,运行exe,然后修复需要替换文件,那么问题不是那个使用中的文件对话框 - 就是安装的产品坏了,所以必需的文件或注册表项已经被除去。应用程序事件日志应具有描述缺少组件的MsiInstaller条目。所以先看看根本原因。

修复后修复需要更换文件非常罕见,因此可能不值得担心。但您可以考虑将应用程序与Restart Manager集成或使用WiX util CloseApplication。

答案 1 :(得分:1)

您看到的警告对话框来自" InstallValidate"标准行动。 我过去遇到过类似的问题。我通过使用单个服务控制元素而不是多个服务控制元素来修复它,用于相同的服务ID 。 就我而言,我有相同服务ID的多个服务控制元素。

这是根据链接 http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Upgrade-uninstall-restart-issue-td7586315.html

这对我有用。许多用户报告了相同的行为,但没有正式记录。 具有单个服务控制元素使重新启动管理器记录服务控制表中的条目,并将阻止重新启动管理器在RMFilesInUse对话框中列出服务或将阻止重新启动管理器 从抛出警告消息通知用户可能需要重新启动。 这是另外一个链接 Can't start windows service with WiX

我的实验告诉我,服务控制元素的数量和重启管理器之间存在定义 http://microsoft.public.windows.msi.narkive.com/OOuQQAsw/controlling-restart-manager-behaviour

另一个选项是使用RESTARTMANAGERCONTROL属性完全禁用Restart Manager。如果禁用RestartManager,系统可能会提示您重新启动(可能需要测试一次)和旧版"正在使用的文件& #34;机制启动。禁用重启管理器是有关msi开发人员有意识的决定,有时是必要的。

我不确定您的服务控制表的外观。只是想与你分享我的经历。

希望它有所帮助。

此致 Kiran Hegde