安装Windows Service with Recovery操作以重新启动

时间:2009-10-27 20:23:51

标签: .net windows-services service

我正在使用ServiceProcessInstallerServiceInstaller类安装Windows服务。

我已使用ServiceProcessInstaller设置起始类型,名称等。但如何将恢复操作设置为重新启动?

我知道我可以在安装服务后手动执行此操作,方法是转到服务管理控制台并更改服务属性的恢复选项卡上的设置,但有没有办法在安装期间执行此操作?

Service Property Recovery Tab

4 个答案:

答案 0 :(得分:85)

您可以使用sc设置恢复选项。以下内容将服务设置为在失败后重新启动:

sc failure [servicename] reset= 0 actions= restart/60000

这可以从C#轻松调用:

static void SetRecoveryOptions(string serviceName)
{
    int exitCode;
    using (var process = new Process())
    {
        var startInfo = process.StartInfo;
        startInfo.FileName = "sc";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;

        // tell Windows that the service should restart if it fails
        startInfo.Arguments = string.Format("failure \"{0}\" reset= 0 actions= restart/60000", serviceName);

        process.Start();
        process.WaitForExit();

        exitCode = process.ExitCode;
    }

    if (exitCode != 0)
        throw new InvalidOperationException();
}

答案 1 :(得分:11)

经过多次尝试后,我使用 sc 命令行应用程序解决了这个问题。

我有使用installutil和sc的批处理文件。我的批处理文件类似于:

installutil.exe "path to your service.exe"
sc failure "your service name" reset= 300 command= "some exe file to execute" actions= restart/20000/run/1000/reboot/1000

如果您需要sc命令的完整文档,请点击以下链接:SC.exe: Communicates with the Service Controller and installed services

注意:您需要在每个等号(=)后添加一个空格。示例:reset = 300

答案 2 :(得分:8)

答案 3 :(得分:2)

我发现以下项目只使用代码和Win API调用来处理这些设置:
http://code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac