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