【问题标题】:Use Wix Installer to install a service.使用 Wix Installer 安装服务。
【发布时间】:2013-12-17 17:17:26
【问题描述】:

大家,我正在使用 Wix 制作安装程序来运行服务,以下是我的问题:

我使用自定义操作调用 sc.exe 来安装和启动服务,然后我使用自定义操作调用 sc.exe [停止/删除] 以在卸载时删除服务。这工作正常,除了一个消息框说

"The setup must update files or services that cannot be updated while the system is running, if you choose to continue, a reboot will be required to complete the setup"

但实际上我点击“确定”后,并没有重启,服务也卸载成功了,请问如何去掉这个提示框呢?

还有一个问题是,点击消息框的“确定”后,又弹出一个消息框,告诉我“另一个程序对文件[fileA]有独占访问权,请点击重试”,我点击重试后,卸载成功完成。 [fileA] 已被删除,但留下了另一个文件 [fildB]。

但我确实使用了一个组件:

<Component
  <RemoveFile ..
  <RemoveFile ...
</Component>

删除这些文件。我有

<Custom Action="StopService" Before="RemoveFiles">..
<Custom Action="RemoveService" After="StopService>..

在我的 wix 中。 有人有什么建议吗?

【问题讨论】:

    标签: service wix installation


    【解决方案1】:

    在 Windows 尝试删除它或句柄或进程仍对其打开时,似乎服务可能尚未真正关闭,这可能是因为它提示需要重新启动才能删除的按摩框。
    如果有打开的进程/句柄,Windows 将无法卸载服务。
    在重启后的当前场景中,我猜它会删除剩余的文件。
    尝试在您的自定义操作中为停止和删除服务提供等待 在 return 标记中提供 asyncWait
    它可能会解决您的问题。
    您正在使用 SC.exe 来控制服务。我建议您使用 WIX ServiceControl 元素而不是自定义操作。

    【讨论】:

    • 查看日志可能很有用,它可以让您更好地了解所涉及的文件,以及是否在 InstallValidate 或文件删除时检测到正在使用。
    • 您好,感谢您的建议,但操作的返回已经是“asyncWait”。我会通过日志看看哪里出了问题
    【解决方案2】:

    尝试将 StopService 和 RemoveService 自定义操作移到成本计算标准操作之前,这是 Windows Installer 分析以查看正在使用的资源并决定是否使用上述消息框提示用户的位置。

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多