我有一个服务(安装和工作没有问题),但要求“智能卡”服务在安装时运行才能正常运行。有没有办法配置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>
可选属性:您可以省略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文档匹配位标志值。
内置系统服务:看到这是一个系统服务,我想你可以将它设置为仅启动并保持启用,而不是添加任何停止,但是你可能需要它在主要升级期间停止替换你自己的文件?我不知道这个场景。请彻底测试 - 并使用虚拟这样的东西。很明显,我知道。主要升级方案可能会要求您在安装时停止,获取更新并防止锁定您要替换的文件。
条件:您应该能够使用该条件来控制是否要运行服务操作。实际上,条件控制是否将安装托管这些服务操作的组件,从而确定服务操作是否将运行(以及)。