【问题标题】:Debugging "service failed to start" Windows Installer error调试“服务无法启动”Windows Installer 错误
【发布时间】:2013-06-02 09:31:34
【问题描述】:

我有一个用 WiX 编写的简单 msi,它安装了原生 NT 服务。在我对 msi 进行一些更改后,它在 StartServices 标准操作中失败,并出现错误“服务无法启动,请验证您是否有足够的权限”。如果我按忽略并手动启动服务,那么它会成功启动。问题绝对不在于权限不足。如何诊断/调试此类问题? Windows Installer 的详细日志似乎不包含任何有用的信息。

【问题讨论】:

    标签: windows debugging service wix windows-installer


    【解决方案1】:

    安装程序不会有任何有用的信息,因为错误只会由安装程序显示。以下是我的处理方法。

    注释掉 ServiceControl 元素,这样安装程序就不会尝试启动服务。 运行安装程序并完成所有操作。 手动启动服务。

    如果服务启动,这表明某种类型的竞争条件。一种常见情况是服务依赖于安装到 GAC 或 WinSXS 的文件。安装程序使用 PublishAssemblies 标准操作将这些文件放在那里。但是,由于 GAC 和 WinSXS API 不支持事务安装,PublishAssemblies 会等到提交阶段才能执行工作。这是在安装程序尝试启动服务之后。另一种常见情况是,如果您有一些自定义操作正在安装或配置服务所需的内容,并且您在安装后期才这样做。

    如果服务仍然无法启动,这通常会排除竞争条件。您必须对服务本身进行概要分析。使用depends、ildasm(如果是.net)和processexplorer(filemon / regmon)等工具来尝试发现缺少的依赖项是什么。更新安装程序,然后冲洗并重复。

    【讨论】:

      【解决方案2】:

      如您所见,Windows Installer 在启动服务失败时不会提供有用的信息。但是,当显示对话框时,机器处于完美状态,可以确定发生了什么问题。因此,与其取消安装,不如开始调试。尝试启动该服务,看看是否可以为您提供更多信息。如果没有,请打开调试器并前往城镇。

      我基本上遵循FireGiant KB Article 中描述的流程。这是找出服务无法启动的最直接方法。太糟糕了,Windows Installer 本身无法提供更好的消息。

      【讨论】:

      • 现在是开发人员调试的最佳时机,但通常有几十个人只是对安装“损坏”感到不满。我通常会禁用该服务并教开发人员如何启用自己,以便在开发人员弄清楚所有问题之前为整个组织带来最少的痛苦。
      猜你喜欢
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多