在我的wix中,我使用以下声明:
ServiceControl
我的Repro:
首先,我像往常一样运行我的安装。安装完成后,我启动了我的Web应用程序。 .exe会像往常一样出现在任务管理器中:
我想在修复,更新或卸载时结束此.exe。所以我再次启动我的.msi并选择修复:
现在我的问题:按“修复”后,由于声明了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
,我预计会出现以下对话框:
但事实并非如此。而是显示以下对话框:
当我记录设置时,日志显示以下行:
didSelectRowAtIndexPath
在修复旁边,我也尝试了一个结果相同的更新。 也许任何声明丢失? 注意:当我在任务管理器中关闭MyApp.exe时,不会显示该消息,因此MyApp.exe肯定对此问题负责。
答案 0 :(得分:1)
您应该将整个日志发布到某处。根本原因是修复通常不需要替换文件。因此,如果你真的安装了你的产品,运行exe,然后修复需要替换文件,那么问题不是那个使用中的文件对话框 - 就是安装的产品坏了,所以必需的文件或注册表项已经被除去。应用程序事件日志应具有描述缺少组件的MsiInstaller条目。所以先看看根本原因。
修复后修复需要更换文件非常罕见,因此可能不值得担心。但您可以考虑将应用程序与Restart Manager集成或使用WiX util CloseApplication。
答案 1 :(得分:1)
您看到的警告对话框来自" InstallValidate"标准行动。 我过去遇到过类似的问题。我通过使用单个服务控制元素而不是多个服务控制元素来修复它,用于相同的服务ID 。 就我而言,我有相同服务ID的多个服务控制元素。
这对我有用。许多用户报告了相同的行为,但没有正式记录。 具有单个服务控制元素使重新启动管理器记录服务控制表中的条目,并将阻止重新启动管理器在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