X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Fservice.c;h=9108beb712f4e21581e06a4ce979ceb43eded63c;hb=9287c96097c00d28310becb14ea3dd7cfb9f2ab0;hp=29e1c7da099f750f4b4f3a2ea2fa35ac58389fce;hpb=26fdcc5e41254131ef755b14243c19d202b14d8e;p=yaz-moved-to-github.git diff --git a/server/service.c b/server/service.c index 29e1c7d..9108beb 100644 --- a/server/service.c +++ b/server/service.c @@ -1,9 +1,20 @@ /* * NT Service interface Utility. * Based on code written by - * Chas Woodfield, Fretwell Downing Datasystems. + * Chas Woodfield, Fretwell Downing Informatics. * $Log: service.c,v $ - * Revision 1.2 1999-02-02 13:57:36 adam + * Revision 1.5 2001-11-13 23:00:42 adam + * Separate malloc debug library. Removal of ASN_COMPILED-#ifdefs. + * + * Revision 1.4 2000/12/05 19:05:10 adam + * Service automatically starts in the directory from which it was installed. + * + * Revision 1.3 1999/06/10 11:45:30 adam + * Added bend_start, bend_stop handlers and removed pre_init. + * Handlers bend_start/bend_stop are called when service/daemon is + * started/stopped. + * + * Revision 1.2 1999/02/02 13:57:36 adam * Uses preprocessor define WIN32 instead of WINDOWS to build code * for Microsoft WIN32. * @@ -38,6 +49,7 @@ #include #include #include +#include #include "service.h" @@ -226,7 +238,7 @@ void CmdInstallService(int argc, char *argv[], BOOL bAutoStart) SC_HANDLE schService; SC_HANDLE schSCManager; - TCHAR szPath[1024]; + TCHAR szPath[2048]; if (GetModuleFileName(NULL, szPath, 512) == 0) { @@ -235,8 +247,15 @@ void CmdInstallService(int argc, char *argv[], BOOL bAutoStart) else { int i; + char cwdstr[_MAX_PATH]; + + if (!_getcwd(cwdstr, sizeof(cwdstr))) + strcpy (cwdstr, "."); + + strcat (szPath, TEXT(" -runservice \"")); + strcat (szPath, cwdstr); + strcat (szPath, "\""); - strcat (szPath, TEXT(" -runservice")); for (i = 1; i < argc; i++) { /* We will add the given command line arguments to the command */ @@ -408,7 +427,9 @@ BOOL CheckServiceArguments(int argc, char *argv[]) else if (stricmp ("-runservice", argv[i]) == 0) { /* We can carry on, if we reached here */ + chdir(argv[i+1]); argv[i] = ""; + argv[i+1] = ""; return(TRUE); } } @@ -438,8 +459,7 @@ BOOL SetupService(int argc, char *argv[], void *pHandle, LPTSTR pAppName, LPTSTR else { /* Set the console control handler for exiting the program */ -/* SetConsoleCtrlHandler((PHANDLER_ROUTINE)EventHandlerRoutine, TRUE); -*/ + SetConsoleCtrlHandler((PHANDLER_ROUTINE)EventHandlerRoutine, TRUE); /* Now do the main work */ ServiceMain(argc, argv); @@ -469,7 +489,7 @@ BOOL EventHandlerRoutine(DWORD dwCtrlType) case CTRL_SHUTDOWN_EVENT: /* A signal that the system sends to all console processes when the system */ /* We are basically shutting down, so call Service_Delete */ Service_Delete(); - return(TRUE); + return(FALSE); break; default: