安装带有恢复操作的 Windows 服务以重新启动

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

我已经使用了 ServiceProcessInstaller来设置开始类型、名称等等

我知道我可以在服务安装后通过进入服务管理控制台并更改服务属性的恢复选项卡上的设置来手动执行,但是在安装期间有办法这样做吗?

Service Property Recovery Tab

45121 次浏览

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();
}

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

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