0

我对使用 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>

这个论点很重要——没有它,服务将无法启动或运行。也许其他人遇到了相同或类似的问题,可以帮助我。

预先感谢 - 每个提示都表示赞赏。


编辑一(15.04.18):

由于可能是特定服务的问题,我将在此处添加一些进一步的信息:

这是一个名为 CryptoLicensing 的第三方软件: http ://www.ssware.com/cryptolicensing/cryptolicensing_net.htm

该软件的一部分是特定程序,它充当许可证服务器并进行许可证注册,例如在客户的网络中。该服务可以作为 Windows 应用程序运行,也可以作为 Windows 服务安装和运行。在这两种情况下,它都应该在已安装机器上的(预)指定端口上进行侦听。每当我将 .exe 作为应用程序启动时,一切都按预期工作。该服务是可访问的(例如使用浏览器),并且可以从网络中的其他机器访问。当 .exe 作为服务安装并启动时,它不会在每台计算机上按预期工作。例如,如果我在笔记本电脑上安装并启动服务,它会在服务管理器中显示为正在运行,但在其分配的 URL 上无法访问(甚至在 localhost 上也无法访问),也无法在活动侦听端口中显示特定端口,例如使用“netstat -a”。该服务本身在没有任何错误消息的情况下启动,并且不会记录任何错误或异常,因为它似乎正在运行而没有任何问题。

我联系了供应商,但有时他不会很快回复,而且他的回复也不是很具体。

在问这个问题之前,我认为这是 Windows 用户权限和 WiX 安装程序的问题,但在这里讨论期间,我觉得这可能是服务本身的问题。我希望这条“新”信息有助于隔离和定位问题。

感谢迄今为止提供帮助的所有人!

4

3 回答 3

1

希望这里没有说明这一点,但是 WiX 除了在 MSI 文件中填充 ServiceInstall 表之外并没有做太多事情,所以这就是为什么 Windows Installer 不会启动该服务的原因。服务安装表:

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 运行时等。

于 2018-04-12T20:37:27.903 回答
0

第一:你确定这个服务打算作为LocalSystem运行吗?( MSDN所以)。

第二:您是否详细检查了事件日志是否有任何明显的东西?如果服务很好,您至少应该找到提示。有什么要开始的。我发现有时我会错过事件查看器中的实际日志,因为它太“拥挤”了。我对此的看法:清空日志并停止并重新启动服务。


锁定/阻塞:如果服务安装并运行正常,我会怀疑其他因素,例如防火墙(硬件和软件)、一般安全软件(防病毒、恶意软件扫描程序)、网络配置问题(代理、WINS、DNS 和所有网络所涉及的复杂性)。服务是否试图到达 UNC 路径?

多样化机器目标机器是什么?它们是虚拟的吗?它们是物理的吗?它们是测试机器吗?它们是在企业网络中运行的 SOE 机器吗?它们是相同的操作系统版本和版本吗?

进一步的想法:它不是很相关,但可能会从另一个答案中略过这个调试建议列表(我不确定为什么它被否决,我认为这是一个可以激发调试想法的列表): Windows 应用程序启动错误异常代码:0xe0434352(也许只是略过粗体字的想法 -推荐)。

sc.exe:最后,也许检查一下sc.exe 工具(服务控制),看看它是否可以为您提供一些有用的调试信息。

一些进一步的链接:

于 2018-04-12T17:07:22.323 回答
0

将近 20 个月后,我们终于(并且意外地)找到了解决问题的方法!对于服务没有正常运行的少数机器,将注册表中的NoInteractiveServices值设置为 0 就可以了。值 1(默认值)表示不允许任何服务以交互方式运行,无论它是否具有 SERVICE_INTERACTIVE_PROCESS 属性。有关交互式服务的更多信息。

我对解决方案并不完全满意,因为在所有其他机器上NoInteractiveServices设置为 1 并且服务仍然正常运行。然而,在服务没有以交互方式运行的机器上,这个解决方案对我们有用。因此,我会接受这个作为答案。

如果有人对此问题有更多信息并可以解释为什么会这样,请随时添加它们-我会非常感兴趣!

于 2019-12-06T19:22:54.733 回答