다시 시작하려면 복구 작업으로 Windows 서비스 설치


88

ServiceProcessInstallerServiceInstaller클래스를 사용하여 Windows 서비스를 설치 하고 있습니다.

를 사용하여 ServiceProcessInstaller시작 유형, 이름 등을 설정했습니다. 그러나 복구 작업을 다시 시작으로 설정하려면 어떻게해야합니까?

서비스 관리 콘솔로 이동하여 서비스 속성의 복구 탭에서 설정을 변경하여 서비스를 설치 한 후 수동으로 수행 할 수 있다는 것을 알고 있지만 설치 중에 수행 할 수있는 방법이 있습니까?

서비스 속성 복구 탭

답변:


99

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();
}

4
공백이 포함 된 경우 서비스 이름을 따옴표로 묶어야합니다.
user626528

19
서비스가 설치 될 때 C #의 Installer [] 서비스 설치 처리기에서이 호출을 호출하려는 경우 서비스 제어 관리자에 서비스가 나타난 직후에 실행할 "Committed"이벤트 처리기에이 호출을 삽입 할 수 있습니다. 서비스가 상자에 처음 설치 될 때는 작동하지 않으므로 "AfterInstall"이벤트 관리자에 넣지 마십시오.
Contango

@Kevin Visual Studio의 코드 분석은 개체를 한 번 이상 폐기해서는 안되며 process.Close()라인은 쓸모가 없다고 제안합니다 .
JohnTube

1
@ JohnTube--process.Close () 줄 삭제
Kevin

23
구문이 일부에게는 이상하게 보일 수 있지만 reset= 0정확하고 reset=0올바르지 않습니다. 공백을 올바르게 사용하는 것이 중요합니다. reset=하나의 인수와 공백, 0.
Liam 2014

12

여러 번 시도한 후 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



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.