如何安装“首次失败”设置为“重新启动服务”的Windows服务C#

问题描述:

我正在使用此方法创建Windows服务。如何安装“首次失败”设置为“重新启动服务”的Windows服务C#

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其他东西?

+0

您是否尝试过.Net提供的'ServiceInstaller'? –

+0

当用'-install'参数运行时,我们需要*关于'myservice.exe' *实际上做些什么*有线索*以便有机会回答这个问题。 –

+0

如何知道myservice.exe对你有什么帮助?我只想配置服务,使其具有在安装时在“恢复”选项卡中设置的选项。 – dizzyOWNZ

我遇到了这个问题,我用了一段时间回来的服务。我不确定您是否可以直接在代码中执行此操作,但您可通过调用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}"); 

的动作参数以上需要斜线分隔组配置。它们在动作和时间之间交替(以毫秒为单位)。所以上述的样子:

  • FirstFailure:重启@60秒
  • 第二破裂:重启@60秒
  • 第三次失败:重新启动@60秒

查看更多有关sc failure

+0

该技巧在http://*.com/a/6877830/491907的接受答案中使用 – pinkfloydx33