/*
* 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.1 1997-11-07 13:31:52 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.
+ *
+ * Revision 1.1 1997/11/07 13:31:52 adam
* Added NT Service name part of statserv_options_block. Moved NT
* service utility to server library.
*
/* For some strange reason it won't work when part of a lib */
/************************************************************/
-#ifdef WINDOWS
+#ifdef WIN32
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
+#include <direct.h>
#include "service.h"
SC_HANDLE schService;
SC_HANDLE schSCManager;
- TCHAR szPath[1024];
+ TCHAR szPath[2048];
if (GetModuleFileName(NULL, szPath, 512) == 0)
{
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 */
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);
}
}
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);
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: