我正在使用ServiceProcessInstaller
和ServiceInstaller
类安装Windows服务。
我已经使用ServiceProcessInstaller
设置了开始类型,名称等。但是如何将恢复操作设置为“重启”呢?
我知道我可以在安装服务后通过转到服务管理控制台并更改服务属性的“恢复”选项卡上的设置来手动执行此操作,但是在安装过程中是否可以执行此操作?
Answers:
您可以使用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();
}
process.Close()
行是无用的。
reset= 0
是正确的,而且reset=0
是不正确的。正确使用空格至关重要,reset=
是一个参数,然后是空格0
。
经过多次尝试,我使用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:与服务控制器和已安装的服务进行通信
注意:您需要在每个等号(=)后添加一个空格。示例:reset = 300
我发现以下项目仅使用代码和Win API调用即可完成这些设置:http :
//code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac