我正在使用此方法创建一个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的其他内容?
答案 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参数采用斜杠分隔的一组配置。它们在动作和时间之间交替(以毫秒为单位)。所以上面看起来像:
详细了解sc failure。