我在使用WiX工具集创建的.msi安装并启动的Web服务出现问题。
可以在我到目前为止测试的所有计算机上安装和启动该服务(显示为在服务管理器中运行)但在某些计算机上无法访问(例如通过浏览器)并且未在监听列表中显示该机器上的端口(显示为' netstat -a')。
我正在试图弄清楚出了什么问题,但我并不熟悉Web服务开发和配置。这是第三方服务,因此我不知道它是如何在内部运作的。 对我来说一个好的起点是找出在执行.msi文件期间安装和启动服务时到底发生了什么。 也许我可以尝试在较低的层面解决问题。
以下是我在ServiceInstall-Element中的代码:
<ServiceInstall
Id="ServiceID"
Type="ownProcess"
Vital="yes"
Name="ServiceName"
DisplayName="ServiceDisplayName"
Description="Lorem Ipsum"
Start="auto"
Account="LocalSystem"
ErrorControl="normal"
Interactive="no"
Arguments="action=run">
</ServiceInstall>
这个论点很重要 - 没有它,服务就不会启动或运行。 也许其他人遇到了相同或类似的问题,可以帮助我。
此前已经提前感谢了 - 每个提示都很受欢迎。
编辑I(15.04.18):
由于特定服务可能存在问题,我将在此处添加更多信息:
这是一款名为CryptoLicensing的第三方软件: http://www.ssware.com/cryptolicensing/cryptolicensing_net.htm
该软件的一部分是特定程序,用作许可证服务器并进行许可证注册,例如在客户的网络中。 该服务可以作为Windows应用程序运行,也可以作为Windows服务安装和运行。在这两种情况下,它应该监听已安装机器上的(预)指定端口。 每当我将.exe作为应用程序启动时,一切都按预期工作。该服务是可访问的(例如使用浏览器),可以从网络中的其他计算机访问。 当.exe作为服务安装并启动时,它在每台计算机上都无法正常工作。例如,如果我在笔记本电脑上安装并启动该服务,它将显示为在服务管理器中运行,但在其分配的URL(甚至在本地主机上)上无法访问,也不会在活动侦听端口中显示特定端口,例如,使用&#39; netstat -a&#39;。 服务本身在没有任何错误消息的情况下启动,并且不记录任何错误或异常,因为它似乎没有任何问题。
我联系了这家供应商,但有时他并没有快速回复,而且他的答复也不是很具体。
在提出问题之前,我认为这是Windows用户权限和WiX安装程序的问题,但在讨论期间,我觉得这可能是服务本身的问题。 我希望这个&#39; new&#39;这条信息有助于隔离和定位问题。
感谢迄今为止所有帮助过的人!
答案 0 :(得分:1)
希望不要在这里说明显而易见的事,但除了填充MSI文件中的ServiceInstall表外,WiX并没有做太多事情,所以这就是Windows Installer无法启动服务的原因。 ServiceInstall表:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa371637(v=vs.85).aspx
此外,这并非真正关于ServiceInstall - 它可能与您的WiX源中的ServiceControl元素有关,但不清楚这是否与您的关系如何相关启动它或者如果您稍后手动启动它。这确实有所作为。什么是错误消息以及您从何处获取它,并且它是1920或1921错误(在ServiceControl的上下文中)。
服务将在一个系统上启动但不在另一个系统上启动的主要原因是缺少依赖性。如果你的服务是基于C ++的(帖子没有说)那么可能依赖于C运行时,UCRT运行时,MFC或ATL运行时等等。
答案 1 :(得分:0)
首先 :您确定此服务旨在作为 LocalSystem 运行吗? (MSDN,SO)。
第二次 :您是否详细检查了事件日志中是否存在明显的问题?如果服务很好,你应该至少找到一个提示。开始的东西。我发现我有时会错过事件查看器中的实际日志,因为它是如此拥挤的#34;。我接受它:清空日志并停止并重新启动服务。
锁定/阻止 :如果服务安装并运行正常,我会怀疑其他因素,例如防火墙(硬件和软件) ,安全软件一般(防病毒,恶意软件扫描程序),网络配置问题(代理,WINS,DNS以及网络中涉及的所有复杂性)。 服务是否尝试到达UNC路径?
多样化的机器 :目标计算机是什么?他们虚拟,他们物理,他们测试机器,他们是操作SOE机器在企业网络中?它们是否相同操作系统版本和版本?
进一步的想法 :它不是很相关,但可以从另一个答案中略过这个调试建议列表(我不知道为什么它被拒绝了,我认为激发调试思想是一个好的清单: Windows Application Startup Error Exception code: 0xe0434352 (也许只是略读想法的粗体字 - 推荐< / EM> 强>)。
sc.exe :最后,或许请检查sc.exe tool(服务控制),看看它是否可以为您提供一些有用的调试信息。
进一步的链接:
答案 2 :(得分:0)
将近20个月后,我们终于(偶然)找到了解决该问题的方法!对于少数在其中不能正常运行服务的计算机,将注册表中的 NoInteractiveServices 值设置为0可以解决问题。值1(默认值)意味着无论服务是否具有SERVICE_INTERACTIVE_PROCESS属性,都不允许其交互式运行。有关Interactive Services的更多信息。
我对该解决方案不完全满意,因为在所有其他计算机上, NoInteractiveServices 均设置为1,并且该服务仍然正常运行。但是,在服务不能交互运行的机器上,此解决方案对我们有效。因此,我会接受这个答案。
如果有人对这个问题有更多的信息,并且可以解释为什么会起作用,请随时 添加他们-我会很感兴趣!