我有一项服务(正在安装并且可以正常使用),但是需要“智能卡”服务在安装时运行,以使其正常运行。如果没有运行,是否可以通过BURN引导程序或主MSI配置WiX安装程序以启动此服务?
我尝试使用服务控制元素,但是我担心,“ Remove”属性将导致在应用程序安装时智能卡服务被卸载!
我不清楚是否只是删除此属性就能解决问题,并且在卸载时也不能删除服务。我只想在服务未运行时启动它,而让它在卸载时仍在运行。
<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>
答案 0 :(得分: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 or an equivalent tool(WiX源)中见证属性不同组合的结果(朝下,建议使用 Orca 在 SuperOrca 上,我发现后者意外地保持了更改)并检查了ServiceControl Table(完成的MSI)。所做的更改将显示在 "Event" column
中。根据MSI SDK文档匹配位标记值。
内置系统服务 :由于这是一项系统服务,因此我想您可以将其设置为仅启动并保持打开状态,而不会在全部,但是您可能需要在大型升级期间停止它来替换自己的文件?我不知道这种情况。请进行彻底测试-并为此类使用虚拟的东西。很明显,我知道。主要的升级方案可能会要求您停止安装,获取更新并防止要替换的文件被锁定。
条件 :您应该能够使用该条件来控制是否要运行服务操作。实际上,条件控制着是否将安装托管那些服务动作的组件,从而确定(也将)服务动作是否运行。