in SimpleRemoteConsole/ServiceInterop/Service.cs [328:378]
private void InitializeService(int argc, IntPtr argv)
{
logger.Info("Begin service initialization.");
hSvcStatus = NativeServiceWrapper.RegisterServiceCtrlHandlerExW(serviceName, svcCtrlHandler, IntPtr.Zero);
if (hSvcStatus == IntPtr.Zero)
{
var error = Marshal.GetLastWin32Error();
var errorMsg = "Could not register service control handler. Error: " + error;
logger.Error("Initialize service failed: " + errorMsg);
throw new Win32Exception(error, errorMsg);
}
ReportSvcStatus(CurrentState.SERVICE_START_PENDING, 0, 3000);
Thread.Sleep(30000);
var strArgs = "\"" + string.Join("\", \"", serviceArgs) + "\"";
logger.Info("Initializing service with arguments: " + strArgs);
var exitCode = 0;
try
{
startHandler(serviceArgs);
ReportSvcStatus(CurrentState.SERVICE_RUNNING, 0, 0);
logger.Info("Service started successfully.");
stopEvent.WaitOne();
}
catch (Exception e)
{
exitCode = -1;
ReportSvcStatus(CurrentState.SERVICE_STOPPED, exitCode, 0);
logger.Error("Exception thrown from service start handler: " + e.Message);
return;
}
logger.Info("Stopping service.");
ReportSvcStatus(CurrentState.SERVICE_STOP_PENDING, 0, 3000);
try
{
stopHandler();
}
catch (Exception e)
{
exitCode = -1;
logger.Error("Exception thrown from service stop handler: " + e.Message);
}
ReportSvcStatus(CurrentState.SERVICE_STOPPED, exitCode, 0);
logger.Info("Service stopped successfully.");
}