我有一个用WiX编写的简单msi,用于安装本机NT服务。在我对msi进行了一些更改后,它在StartServices标准操作失败,错误“服务无法启动,验证您有足够的权限”。如果我按Ignore并手动启动服务,则它会成功启动。问题绝对不在于权限不足。如何诊断/调试此类问题? Windows Installer的详细日志似乎不包含任何有用的信息。
答案 0 :(得分:5)
安装程序没有任何有用的信息,因为错误仅由安装程序显示。我就是这样做的。
注释掉ServiceControl元素,以便安装程序不会尝试启动该服务。 运行安装程序并完成所有操作。 手动启动服务。
如果服务启动,则表示某种类型的竞争条件。一种常见情况是服务依赖于安装到GAC或WinSXS的文件。安装程序使用PublishAssemblies标准操作将这些文件放在那里。但是,由于GAC和WinSXS API不支持跨安装,因此PublishAssemblies将等待提交阶段以执行工作。这是在安装程序尝试启动服务之后。另一个常见的情况是,如果您有一些自定义操作,即安装或配置服务所需的内容,并且您在安装后期进行此操作。
如果服务仍无法启动,通常会排除竞争条件。您必须自行分析服务。使用depends,ildasm(如果.net)和processexplorer(filemon / regmon)等工具来尝试发现缺少的依赖项。更新安装程序,然后冲洗并重复。
答案 1 :(得分:1)
如您所见,Windows Installer在无法启动服务时无法提供有用的信息。但是,当显示对话框时,机器处于完美状态以确定出错的地方。因此,而不是取消安装,开始调试。尝试启动该服务,看看是否能为您提供更多信息。如果没有,请打破调试器并前往城镇。
我基本上遵循此FireGiant KB Article中描述的过程。这是找出服务无法启动的最直接方法。 Windows Installer本身无法提供更好的消息太糟糕了。