From 641ca3d49d670d8ded817dfeb6154ff1614b64f0 Mon Sep 17 00:00:00 2001 From: R4SAS Date: Mon, 10 Jul 2017 01:14:55 +0300 Subject: [PATCH] install windows service with daemon argument --- Win32/Win32Service.cpp | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/Win32/Win32Service.cpp b/Win32/Win32Service.cpp index 48f4b456..d3785999 100644 --- a/Win32/Win32Service.cpp +++ b/Win32/Win32Service.cpp @@ -70,7 +70,6 @@ void WINAPI I2PService::ServiceCtrlHandler(DWORD dwCtrl) } } - I2PService::I2PService(PSTR pszServiceName, BOOL fCanStop, BOOL fCanShutdown, @@ -147,8 +146,7 @@ void I2PService::Start(DWORD dwArgc, PSTR *pszArgv) void I2PService::OnStart(DWORD dwArgc, PSTR *pszArgv) { - LogPrint(eLogInfo, "Win32Service in OnStart", - EVENTLOG_INFORMATION_TYPE); + LogPrint(eLogInfo, "Win32Service in OnStart", EVENTLOG_INFORMATION_TYPE); Daemon.start(); @@ -165,7 +163,7 @@ void I2PService::WorkerThread() { while (!m_fStopping) { - ::Sleep(1000); // Simulate some lengthy operations. + ::Sleep(1000); // Simulate some lengthy operations. } // Signal the stopped event. @@ -270,12 +268,10 @@ void I2PService::Continue() } } - void I2PService::OnContinue() { } - void I2PService::Shutdown() { try @@ -294,19 +290,16 @@ void I2PService::Shutdown() } } - void I2PService::OnShutdown() { } - void I2PService::SetServiceStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint) { static DWORD dwCheckPoint = 1; - m_status.dwCurrentState = dwCurrentState; m_status.dwWin32ExitCode = dwWin32ExitCode; m_status.dwWaitHint = dwWaitHint; @@ -335,12 +328,7 @@ void FreeHandles(SC_HANDLE schSCManager, SC_HANDLE schService) } } -void InstallService(PSTR pszServiceName, - PSTR pszDisplayName, - DWORD dwStartType, - PSTR pszDependencies, - PSTR pszAccount, - PSTR pszPassword) +void InstallService(PSTR pszServiceName, PSTR pszDisplayName, DWORD dwStartType, PSTR pszDependencies, PSTR pszAccount, PSTR pszPassword) { printf("Try to install Win32Service (%s).\n", pszServiceName); @@ -354,10 +342,10 @@ void InstallService(PSTR pszServiceName, FreeHandles(schSCManager, schService); return; } + strncat(szPath, " --daemon", MAX_PATH); // Open the local default service control manager database - schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | - SC_MANAGER_CREATE_SERVICE); + schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT | SC_MANAGER_CREATE_SERVICE); if (schSCManager == NULL) { printf("OpenSCManager failed w/err 0x%08lx\n", GetLastError()); @@ -381,6 +369,7 @@ void InstallService(PSTR pszServiceName, pszAccount, // Service running account pszPassword // Password of the account ); + if (schService == NULL) { printf("CreateService failed w/err 0x%08lx\n", GetLastError()); @@ -412,8 +401,7 @@ void UninstallService(PSTR pszServiceName) } // Open the service with delete, stop, and query status permissions - schService = OpenService(schSCManager, pszServiceName, SERVICE_STOP | - SERVICE_QUERY_STATUS | DELETE); + schService = OpenService(schSCManager, pszServiceName, SERVICE_STOP | SERVICE_QUERY_STATUS | DELETE); if (schService == NULL) { printf("OpenService failed w/err 0x%08lx\n", GetLastError());