Install Windows Service with Recovery action to Restart

Solution 1:

You can set the recovery options using sc. The following will set the service to restart after a failure:

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

This can easily be called from 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();
}

Solution 2:

After many attemps, I resolved it using sc command line app.

I have batch file with installutil and sc. My batch file is similar to:

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

If you want the full documentation of sc command, follow this link: SC.exe: Communicates with the Service Controller and installed services

Note: You need to add an space after each equal (=) symbol. Example: reset= 300

Solution 3:

I don't think it's part of the .NET API, but this might help:

A ServiceInstaller Extension That Enables Recovery and Autostart Configuration

Install a Windows service the way YOU want to! (C# version)

Solution 4:

I found the following project which takes care of these settings, using only code and Win API calls:
http://code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac