如何使用" First Failure"安装Windows服务设置为"重新启动服务" C#

时间:2017-03-06 07:51:35

标签: c# windows service

我正在使用此方法创建一个Windows服务。

public void InstallService(string username, string password, string configurationUser, string configurationPassword)
{
    var installationPath = GetInstallationPath();
    var process = installationPath + @"myservice.exe ";
    args = "-install " + username + " " + password;
    InstallProcessWithLogOn(process, args, username, password, configurationUser, configurationPassword, 90 * 1000);
    // InstallProcessWithLogOn uses the method CreateProcessWithLogonW
}

默认情况下,我的服务在“恢复”标签中有"不采取任何措施"在第一次失败,第二次失败和第三次失败。

如何修改我的方法,以便在创建服务时将其设置为"重新启动服务"对于第一次失败,第二次失败和第三次失败?

LE:有没有办法使用advapi32.dll的方法CreateProcessWithLogonW配置该服务?还是来自advapi32.dll的其他内容?

1 个答案:

答案 0 :(得分:2)

我遇到了一个我曾经有过一段时间服务的问题。我不确定您是否可以直接在代码中执行此操作,但可以在命令提示符处通过调用sc failure手动设置它。我最终使用的选项是在提交安装后执行命令,方法是附加到Install.Commited事件处理程序

var serviceName = "YourWindowsServiceName";
var resetAfter = 60000;
Process.Start("cmd.exe", $"/c sc failure \"{serviceName}\" reset= 0 actions= restart/{resetAfter}/restart/{resetAfter}/restart/{resetAfter}");

上面的actions参数采用斜杠分隔的一组配置。它们在动作和时间之间交替(以毫秒为单位)。所以上面看起来像:

  • FirstFailure:restart @ 60seconds
  • 第二次失败:重启@ 60秒
  • 第三次失败:重启@ 60秒

详细了解sc failure