ServiceProcessInstaller
및 ServiceInstaller
클래스를 사용하여 Windows 서비스를 설치 하고 있습니다.
를 사용하여 ServiceProcessInstaller
시작 유형, 이름 등을 설정했습니다. 그러나 복구 작업을 다시 시작으로 설정하려면 어떻게해야합니까?
서비스 관리 콘솔로 이동하여 서비스 속성의 복구 탭에서 설정을 변경하여 서비스를 설치 한 후 수동으로 수행 할 수 있다는 것을 알고 있지만 설치 중에 수행 할 수있는 방법이 있습니까?
답변
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();
}
답변
여러 번 시도한 후 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
답변
.NET API의 일부라고 생각하지 않지만 도움이 될 수 있습니다.
답변
코드와 Win API 호출 만 사용하여 이러한 설정을 처리하는 다음 프로젝트를 찾았습니다.
http://code.msdn.microsoft.com/windowsdesktop/CSWindowsServiceRecoveryPro-2147e7ac