Directive s=pw sets structure to phrase if term includes blank(s).
[yaz-moved-to-github.git] / server / service.c
index 29e1c7d..22ec699 100644 (file)
@@ -3,7 +3,15 @@
  *  Based on code written by
  *     Chas Woodfield, Fretwell Downing Datasystems.
  * $Log: service.c,v $
- * Revision 1.2  1999-02-02 13:57:36  adam
+ * 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 +46,7 @@
 #include <windows.h>
 #include <stdio.h>
 #include <tchar.h>
+#include <direct.h>
 
 #include "service.h"
 
@@ -226,7 +235,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 +244,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 +424,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 +456,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 +486,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: