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

我用了ServiceProcessInstaller来设置开始类型、名称等,但用了how do I set the recovery action to Restart?

我知道在安装服务后,我可以通过转到服务管理控制台并更改服务属性的"恢复"选项卡上的设置来手动执行此操作,但在安装过程中是否有方法执行此操作?

服务属性恢复选项卡

推荐答案

您可以使用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();
}

.net相关问答推荐

Long.MaxValue从Single到Long的转换导致溢出异常

在PowerShell中,XML子对象和属性是对象属性.它怎麽工作?

在 Inno Setup 中判断给定服务的依赖服务

System.IO.Directory.Exists 在 LINQ 语句中失败,但在 foreach 循环中没有

使用 SSH.NET 查找具有特定文件名的最新 SFTP 文件

在.NET C#中截断整个单词的字符串

在 C# 中将字符串转换为 colored颜色

代理、包装器或外观类之间有什么区别

将 DataRowCollection 转换为 IEnumerable

将客户端证书添加到 .NET Core HttpClient

简单委托(委托)与多播委托

带有输入字段的消息框

获取类型的默认构造函数的最有效方法

您可以在 C# 代码中捕获本机异常吗?

无法在 Windows 10 上安装 Windows SDK 7.1

ToLowerInvariant() 有什么问题?

是否可以在 XP 上运行 .NET 4.5 应用程序?

无法加载文件或程序集Antlr3.Runtime (1)或其依赖项之一

是否可以判断对象是否已附加到实体框架中的数据上下文?

ValueTypes 如何从 Object (ReferenceType) 派生并且仍然是 ValueTypes?