使用WiX安装时启动外部服务

问题描述 投票:3回答:1

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

我尝试过使用服务控制元素,但我担心“删除”属性会导致在应用程序出现时卸载SmartCard服务!

我不清楚是否只是删除此属性可以解决问题,并且不会在卸载时删除该服务。我只想启动该服务,如果它没有运行并让它在卸载时运行。

<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个回答
2
投票

可选属性:您可以省略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:您可以通过查看ServiceControl element编译的MSI(朝向底部,更喜欢Orca而不是SuperOrca,我已经看到后者持续出现意外变化)并检查Orca or an equivalent tool(wazxswpoi)来查看ServiceControl Table(WiX源)中不同属性组合的结果。完成MSI)。这些变化将在"Event" column中显示。根据MSI SDK文档匹配位标志值。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.