/
bin/95/
docs/DM/
docs/creatures/
docs/objects/
docs/rooms/
docs/utils/
help/
log/
objmon/ddesc/
player/
post/
rooms/
util/
util/fing/
util/italk/
util/lev-reset/
util/lib/
util/list/
util/msg/
util/tdel/
util/vote/
util/wtfix/
#include <stdio.h>
#include <windows.h>

extern void HandleError(char *pcMsg, int iErr);
void InstService();
void UninstService();
char path[80];

void main(int argc, char *argv[])
{
	if (argc>2) {
		sprintf(path,"%s/mordornt.exe",argv[2]);
		if (strcmp(argv[1],"-install")==0) {
			printf("Installing Service to %s\n",path);
		}
		return;
	}
	if (argc=2) {
		if (strcmp(argv[1],"-install")==0) {
			sprintf(path,"d:/mud/bin/mordornt.exe");
			printf("Installing Service\n");
			InstService();
		}
		if (strcmp(argv[1],"-uninstall")==0) {
			printf("Uninstalling Service\n");
			UninstService();
		}
		if (strcmp(argv[1],"-?")==0) {
			printf("Syntax:  Service [-install [path]|-unistall]\n");
			printf("  i.e.:  Service -install d:/mud/bin (note:  use front slashes!)");
			printf("  i.e.:  Service -install   (uses d:/mud)");
			printf("         Service -uninstall");
		}
		return;
	}
}

void InstService()
{

  SC_HANDLE myService, scm;
  printf("Installing MORDOR Server...\n");
  scm = OpenSCManager(0, 0, SC_MANAGER_CREATE_SERVICE);
  if (!scm)
    HandleError("OpenSCManager failed!", GetLastError());
  printf("Open Service Control Manager...\n");
  myService = CreateService(scm, "MudServices", "Mud Services",
                SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, 
                SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
                path, 0, 0, 0, 0, 0);
  if (!myService)
    HandleError("CreateService failed!", GetLastError());
  else
    printf("Service successfully installed.\n");
  CloseServiceHandle(myService);
  CloseServiceHandle(scm);
}


void UninstService()
{
  SC_HANDLE myService, scm;
  BOOL bSuccess;
  SERVICE_STATUS status;
  printf("Removing Service...\n");
  scm = OpenSCManager(0, 0, SC_MANAGER_CREATE_SERVICE);
  if (!scm)
    HandleError("OpenSCManager failed!", GetLastError());
  printf("Open Service Control Manager...\n");
  myService = OpenService(scm, "MudServices", SERVICE_ALL_ACCESS | DELETE);
  if (!myService)
    HandleError("OpenService failed!", GetLastError());
  if (status.dwCurrentState != SERVICE_STOPPED)
  {
    printf("Service currently active.  Stopping service...\n");
    bSuccess = ControlService(myService, SERVICE_CONTROL_STOP, &status);
    if (!bSuccess)
		if (!(GetLastError()==1062))
			HandleError("ControlService failed to stop service!", GetLastError());
    Sleep(500);
  }
  bSuccess = DeleteService(myService);
  if (!bSuccess)
    HandleError("DeleteService failed!", GetLastError());
  else
    printf("Service successfully removed.\n");
  CloseServiceHandle(myService);
  CloseServiceHandle(scm);
}