From 2f5d15c7c449fc7876ac3bca7883fc58dbcf8c45 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Fri, 9 May 2003 18:35:42 +0000 Subject: [PATCH] Service Description for Win32 + manual update git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@502 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/autoconf/configure.in | 2 +- bacula/configure | 2 +- bacula/kernstodo | 2 + bacula/src/filed/win32/winservice.cpp | 126 ++++++++------------------ 4 files changed, 40 insertions(+), 92 deletions(-) diff --git a/bacula/autoconf/configure.in b/bacula/autoconf/configure.in index 5df3c63c98..bca45330c4 100644 --- a/bacula/autoconf/configure.in +++ b/bacula/autoconf/configure.in @@ -1271,8 +1271,8 @@ redhat) platforms/redhat/bacula-sd \ platforms/redhat/bacula-dir \ platforms/redhat/bacula.mysql.spec \ - platforms/redhat/bacula.sqlite.ul.spec \ platforms/redhat/bacula.sqlite.spec \ + platforms/redhat/bacula.sqlite.rel.spec \ " hostname=`hostname -s` ;; diff --git a/bacula/configure b/bacula/configure index 470f9f1d08..c4cd8d3135 100755 --- a/bacula/configure +++ b/bacula/configure @@ -9513,8 +9513,8 @@ redhat) platforms/redhat/bacula-sd \ platforms/redhat/bacula-dir \ platforms/redhat/bacula.mysql.spec \ - platforms/redhat/bacula.sqlite.ul.spec \ platforms/redhat/bacula.sqlite.spec \ + platforms/redhat/bacula.sqlite.rel.spec \ " hostname=`hostname -s` ;; diff --git a/bacula/kernstodo b/bacula/kernstodo index a17d628397..8fcc4af0bd 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -19,6 +19,8 @@ Testing to do: (painful) For 1.31 release: +- Properly configure console and gconsole (currently for source not + configured for installation). - Fix "access not allowed" for backup of files on WinXP. - Check for existence of all new Win32 API's. See LoadLibrary in winservice.cpp diff --git a/bacula/src/filed/win32/winservice.cpp b/bacula/src/filed/win32/winservice.cpp index 2315e3ab95..1f4cefca07 100755 --- a/bacula/src/filed/win32/winservice.cpp +++ b/bacula/src/filed/win32/winservice.cpp @@ -42,6 +42,9 @@ #include "winservice.h" #include "wintray.h" +void set_service_description(SC_HANDLE hSCManager, SC_HANDLE hService, + LPSTR lpDesc); + // OS-SPECIFIC ROUTINES @@ -525,30 +528,6 @@ bacService::InstallService() "be run the next time this machine is rebooted. ", szAppName, MB_ICONINFORMATION | MB_OK); - -#ifdef needed - // Run the service... - STARTUPINFO si; - si.cb = sizeof(si); - si.cbReserved2 = 0; - si.lpReserved = NULL; - si.lpReserved2 = NULL; - si.dwFlags = 0; - si.lpTitle = NULL; - PROCESS_INFORMATION pi; - if (!CreateProcess(NULL, servicecmd, // Program name & path - NULL, NULL, // Security attributes - FALSE, // Inherit handles? - NORMAL_PRIORITY_CLASS, // Extra startup flags - NULL, // Environment table - NULL, // Current directory - &si, - &pi - )) { - MessageBox(NULL, "CreateProcess: the Bacula service failed to start", szAppName, MB_ICONSTOP | MB_OK); - break; - } -#endif break; // Windows NT @@ -591,7 +570,8 @@ bacService::InstallService() break; } - /*****FIXME***** add code to set Description */ + set_service_description(hsrvmanager,hservice, +"Provides file backup and restore services. Bacula -- the Network Backup Solution."); CloseServiceHandle(hsrvmanager); CloseServiceHandle(hservice); @@ -855,106 +835,72 @@ void LogErrorMsg(char *message, char *fname, int lineno) } /* ================== Not yet implemented ===================== */ -#ifdef implemented -VOID ReconfigureSampleService(BOOL fDisable, LPSTR lpDesc) +void set_service_description(SC_HANDLE hSCManager, SC_HANDLE hService, + LPSTR lpDesc) { SC_LOCK sclLock; LPQUERY_SERVICE_LOCK_STATUS lpqslsBuf; SERVICE_DESCRIPTION sdBuf; - DWORD dwBytesNeeded, dwStartType; + DWORD dwBytesNeeded; // Need to acquire database lock before reconfiguring. - sclLock = LockServiceDatabase(schSCManager); + sclLock = LockServiceDatabase(hSCManager); // If the database cannot be locked, report the details. - if (sclLock == NULL) - { + if (sclLock == NULL) { // Exit if the database is not locked by another process. - if (GetLastError() != ERROR_SERVICE_DATABASE_LOCKED) - MyErrorExit("LockServiceDatabase"); + if (GetLastError() != ERROR_SERVICE_DATABASE_LOCKED) { + log_error_message("LockServiceDatabase"); + return; + } // Allocate a buffer to get details about the lock. - - lpqslsBuf = (LPQUERY_SERVICE_LOCK_STATUS) LocalAlloc( + lpqslsBuf = (LPQUERY_SERVICE_LOCK_STATUS)LocalAlloc( LPTR, sizeof(QUERY_SERVICE_LOCK_STATUS)+256); - if (lpqslsBuf == NULL) - MyErrorExit("LocalAlloc"); + if (lpqslsBuf == NULL) { + log_error_message("LocalAlloc"); + return; + } // Get and print the lock status information. if (!QueryServiceLockStatus( - schSCManager, + hSCManager, lpqslsBuf, sizeof(QUERY_SERVICE_LOCK_STATUS)+256, - &dwBytesNeeded) ) - MyErrorExit("QueryServiceLockStatus"); + &dwBytesNeeded)) { + log_error_message("QueryServiceLockStatus"); + } - if (lpqslsBuf->fIsLocked) - printf("Locked by: %s, duration: %d seconds\n", + if (lpqslsBuf->fIsLocked) { + printf("Locked by: %s, duration: %ld seconds\n", lpqslsBuf->lpLockOwner, lpqslsBuf->dwLockDuration); - else + } else { printf("No longer locked\n"); + } LocalFree(lpqslsBuf); - MyErrorExit("Could not lock database"); + log_error_message("Could not lock database"); + return; } // The database is locked, so it is safe to make changes. - // Open a handle to the service. - - schService = OpenService( - schSCManager, // SCManager database - "Sample_Srv", // name of service - SERVICE_CHANGE_CONFIG); // need CHANGE access - if (schService == NULL) - MyErrorExit("OpenService"); - - dwStartType = (fDisable) ? SERVICE_DISABLED : - SERVICE_DEMAND_START; - - // Make the changes. - - if (! ChangeServiceConfig( - schService, // handle of service - SERVICE_NO_CHANGE, // service type: no change - dwStartType, // change service start type - SERVICE_NO_CHANGE, // error control: no change - NULL, // binary path: no change - NULL, // load order group: no change - NULL, // tag ID: no change - NULL, // dependencies: no change - NULL, // account name: no change - NULL, // password: no change - NULL) ) // display name: no change - { - MyErrorExit("ChangeServiceConfig"); - } - else - printf("ChangeServiceConfig SUCCESS\n"); - sdBuf.lpDescription = lpDesc; - if( !ChangeServiceConfig2( - schService, // handle to service - SERVICE_CONFIG_DESCRIPTION // change: description - &sdBuf) ) // value: new description - { - MyErrorExit("ChangeServiceConfig2"); - } - else + if(!ChangeServiceConfig2( + hService, // handle to service + SERVICE_CONFIG_DESCRIPTION, // change: description + &sdBuf) ) { // value: new description + log_error_message("ChangeServiceConfig2"); + } else { printf("ChangeServiceConfig2 SUCCESS\n"); + } // Release the database lock. - UnlockServiceDatabase(sclLock); - - // Close the handle to the service. - - CloseServiceHandle(schService); } -#endif -- 2.39.5