如何在WiX安装程序中更改Windows服务的启动类型

32
我们需要将 Windows 服务的启动类型从“自动”修改为“延迟自动启动”。我该如何做到这一点?
我的代码是这样的:
<ServiceInstall
    Id="WinServiceInstall"
    Name="ServiceManager"
    DisplayName="ServiceManager"
    Type="ownProcess"
    Start="auto"
    ErrorControl="normal"
    Vital ='yes'
    Description ='Monitoring and running the jobs'
    Account="[SERVICEACCOUNT]"
    Password="[SERVICEPASSWORD]">
    <util:ServiceConfig
        FirstFailureActionType="restart"
        SecondFailureActionType="restart"
        ThirdFailureActionType ="restart"
        cRestartServiceDelayInSeconds ="10" />
</ServiceInstall>

我该如何设置重启服务的时间?如果失败,我想在2分钟后将其重启。

2个回答

66

将一个 ServiceConfig 元素放置在 ServiceInstall 元素内。

<ServiceConfig DelayedAutoStart="yes" OnInstall="yes" OnReinstall ="yes" />

4
我已经测试了。ServiceConfig必须包含如下所示的必需属性,否则它将无法编译。 <wix:ServiceConfig DelayedAutoStart="yes" OnInstall="yes" OnReinstall ="yes"/> - Gregory Khrapunovich
是的,我纠正了代码片段,因为原始代码会导致 WiX 错误。 - Igor Brejc

-2
如果您需要支持非常旧版本的Windows,则需要使用reg-value进行设置,因为MSI <5.0无法识别ServiceConfig选项。否则,您应该使用ServiceConfig方法。
<RegistryValue Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\[ServiceName]"
               Type="integer" Name="DelayedAutostart" Value="1"/>

我把这个放在与ServiceInstall相同的组件中,一切似乎都工作得很好。我想你可以对服务重启时间做同样的事情。


1
@Cooper,“DelayedAutostart”在我的64位Server 2008 SP2机器上可以工作。不过我无法评论重启时间。 - Dave Andersen
我同意ServiceConfig方法是首选,但(根据WiX文档)仅适用于MSI 5.0或更高版本。此外,这种方法确实对我们有效,并且已在发布的生产代码中使用。 - Dave Andersen
2
注意:DelayedAutostart参数不可靠。看起来Windows要么在缓存它,要么在多个地方保存它,因为如果你在运行时更改它,通常它实际上不会改变services.msc显示的启动类型... - Giacomo Lacava
@GiacomoLacava,但是当系统重新启动时,它能正常工作吗?如果可以,那么如果在services.msc中显示错误的值又有什么关系呢? - Dave Andersen
八年时间过去了,我真的没有任何旧系统可以再次检查了 :) 我想我的观察主要是关于Windows在我的情况下对该键没有一致的反应,这可能意味着重启后也不适用。至少这是我的猜测... - Giacomo Lacava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接