【问题标题】:Starting an external service on install with WiX使用 WiX 在安装时启动外部服务
【发布时间】:2019-08-19 03:47:26
【问题描述】:

我有一项服务(正在安装和运行没有问题),但需要在安装时运行“智能卡”服务才能正常运行。有没有办法配置 WiX 安装程序(通过 BURN 引导程序或主 MSI)以在安装时启动此服务(如果它没有运行)?

我曾尝试使用服务控制元素,但我担心“删除”属性会导致智能卡服务在应用程序被卸载时被卸载!

我不清楚简单地删除此属性是否会解决问题并且不会在卸载时删除服务。我只想在服务未运行时启动它,并在卸载时让它运行。

<Component Id="SmartCardServiceStarter" Directory="INSTALLFOLDER" 
           Guid="A-GUID" KeyPath="yes">
  <ServiceControl Id="SmartCardServiceStarter"
                    Start="install"
                    Stop="uninstall"
                    Remove="???"
                    Name="SCardSvr"
                    Wait="yes" />
  <Condition><![CDATA[STARTSERVICEONINSTALL <> "false"]]></Condition>
</Component>

【问题讨论】:

    标签: windows service wix burn


    【解决方案1】:

    可选属性:您可以省略Remove attribute,也可以将服务设置为仅在安装时停止和启动,即使您卸载了服务也会继续运行(这可能很好,因为您不知道其他应用程序是否依赖于该服务 - 您可以想象一下并检测您最初是否必须启动该服务,但这可能不是必需的) :

    <Component Id="SmartCardServiceStarter" Directory="INSTALLFOLDER" Guid="PUT-GUID-HERE" KeyPath="yes">
      <ServiceControl Id="SmartCardServiceStarter"
                        Start="install"
                        Stop="install"
                        Name="SCardSvr"
                        Wait="yes" />
      <!-- <Condition><![CDATA[STARTSERVICEONINSTALL <> "false"]]></Condition> -->
    </Component>
    

    ServiceControl Table:您可以通过使用Orca or an equivalent tool 查看您编译的 MSI(靠近底部,更喜欢 Orca SuperOrca,我看到后者出乎意料地持续更改)并检查了ServiceControl Table(已完成 MSI)。更改将显示在 "Event" column 中。根据 MSI SDK 文档匹配位标志值。

    内置系统服务:鉴于这是一个系统服务,我想您可以将其设置为仅启动并保持开启,而不添加任何停止全部,但您可能需要它在重大升级期间停止替换您自己的文件?我不知道剧情。请彻底测试 - 并为这样的东西使用虚拟。很明显,我知道。主要升级方案可能会要求您停止安装、获取更新并防止锁定要替换的文件。

    条件:您应该能够使用该条件来控制是否要运行服务操作。实际上,条件控制是否安装托管这些服务操作的组件,从而确定服务操作是否会运行(以及)。

    【讨论】:

    • 它们是可选的?!?!?!为什么文档在 WiX 网站上没有这样说!我想知道是否是这种情况,但没有明确说明,我不想尝试最终删除服务!我会试试这个
    • 是的,我想他们至少应该更新网站,或者样本可能会有所帮助?无论哪种方式,作为 MSI 专家,这实际上是很清楚的,但对于非 MSI 专家来说,我想这确实是一个巨大的惊喜。 MSI 确实有 a lot of quirks(非常混乱,临时的“笔记”),还有一些 crucial corporate benefits
    • 辛苦了!谢谢你让我摆脱束缚!
    • 太好了,很高兴它成功了。请彻底测试,MSI 很复杂。
    • 同意,现在只需将服务设置为自动启动,从手动... yay msi 复杂性!
    猜你喜欢
    • 2014-06-14
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多