在我的 wix 中,我使用以下声明:
<ComponentGroup Id="BinComponents" Directory="BIN">
<Component Id="BinComponent" Guid="23D229D0-06EE-49f4-80B4-6D7136500721">
<File Id="MyProjectOutput" Name="MyProject.exe" Source="MyProject\bin\MyProject.exe"/>
<ServiceControl Id="RemoveService"
Stop="both"
Remove="both"
Name="MyProject.exe"
Wait="yes" /> <!-- Stop running MyProject instances -->
</Component>
</ComponentGroup>
我的重现:
首先,我像往常一样运行安装。安装后,我启动我的网络应用程序。 .exe 像往常一样出现在任务管理器中:
我想在修复、更新或卸载时结束此 .exe。所以我再次启动我的 .msi 并选择修复:
现在我的问题:按“修复”后,由于声明的
ServiceControl
,我预计会出现以下对话框:
但事实并非如此。相反,会出现以下对话框:
当我记录设置时,日志显示以下行:
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
在修复旁边,我还尝试了更新,结果相同。 也许缺少任何声明? 注意:当我在任务管理器中关闭 MyApp.exe 时,不会出现该消息,因此问题肯定是 MyApp.exe 造成的。
您看到的警告对话框来自“InstallValidate”标准操作。 我过去也遇到过类似的问题。对于相同的服务 id,我通过使用单个服务控制元素而不是多个服务控制元素来修复它。 就我而言,同一个服务 ID 有多个服务控制元素。
这对我有用。许多用户报告了相同的行为,尽管没有正式记录。 具有单个服务控制元素会使重新启动管理器记录服务控制表中的条目,并将阻止重新启动管理器在 RMFilesInUse 对话框中列出该服务,或者将阻止重新启动管理器 避免抛出警告消息,通知用户可能需要重新启动。 这是另外一个链接 无法使用 WiX 启动 Windows 服务
我的实验表明,服务控制元素的数量和重新启动管理器之间存在明确的联系 http://microsoft.public.windows.msi.narkive.com/OOuQQAsw/controlling-restart-manager-behaviour
另一个选项是使用属性 RESTARTMANAGERCONTROL 完全禁用重新启动管理器,如果您禁用 RestartManager,系统可能会提示您重新启动(您可能想测试一次),并且旧版“正在使用的文件”机制将启动。禁用重新启动管理器是相关 msi 开发人员的明智决定,有时是必要的。
我不确定您的服务控制表是什么样子。只是想与您分享我的经验。
希望有帮助。
问候, 基兰·赫格德
您应该将整个日志发布到某处。根本原因是修复不应该经常需要替换文件。因此,如果您确实安装了产品,运行了 exe,然后需要修复来替换文件,那么问题不在于文件使用对话框 - 而是安装的产品已损坏,因此所需的文件或注册表项已被删除。已删除。应用程序事件日志应包含描述丢失组件的 MsiInstaller 条目。因此,首先看看根本原因。
修复后,修复需要替换文件的情况应该很少见,因此可能不值得担心。但您可以考虑将您的应用程序与重新启动管理器集成或使用 WiX util CloseApplication。
进入cdrive 打开程序文件 检查顶部菜单中的视图选项可用 然后有一个名为 MONGODb 的文件 删除它 再次安装现在就可以安装了。