mariadb/server-tools/instance-manager/IMService.cpp
unknown c6dfe79beb fixed the service bits of the IM
server-tools/instance-manager/IMService.cpp:
  * setting username and password to NULL so that the 
  IM runs at LocalSystem (this should be changed soon)
  * implemented stop service by raising a sigterm
  * implemented start service by loading options and calling manager()
server-tools/instance-manager/IMService.h:
  changed the sig for Run()
server-tools/instance-manager/WindowsService.cpp:
  default debugging to false
  changed the sig of RuN()
server-tools/instance-manager/WindowsService.h:
  change the sig of run()
server-tools/instance-manager/instance.cc:
  * remove the inclusion of process.h
  * concat all args into a single buffer to pass to CreateProcess
server-tools/instance-manager/instance_options.cc:
  quoting the binary to handle paths with quotes
server-tools/instance-manager/listener.cc:
  use a timeval for select so that our select will only run
  for 100 msec before we check to see if we are shutting down
server-tools/instance-manager/mysqlmanager.cc:
  if we are given the stand alone option, then run the manager as 
  standalone
server-tools/instance-manager/options.cc:
  Added stand alone command line arg
server-tools/instance-manager/options.h:
  Added stand alone command line arg
2005-09-13 14:53:19 -05:00

82 lines
1.5 KiB
C++

#include <windows.h>
#include <signal.h>
#include "log.h"
#include "options.h"
#include "IMService.h"
#include "manager.h"
IMService::IMService(void)
{
serviceName= "MySqlManager";
displayName= "MySQL Manager";
username= NULL;
password= NULL;
}
IMService::~IMService(void)
{
}
void IMService::Stop()
{
ReportStatus(SERVICE_STOP_PENDING);
// stop the IM work
raise(SIGTERM);
}
void IMService::Run(DWORD argc, LPTSTR *argv)
{
// report to the SCM that we're about to start
ReportStatus((DWORD)SERVICE_START_PENDING);
Options o;
o.load(argc, argv);
// init goes here
ReportStatus((DWORD)SERVICE_RUNNING);
// wait for main loop to terminate
manager(o);
o.cleanup();
}
void IMService::Log(const char *msg)
{
log_info(msg);
}
int HandleServiceOptions(Options options)
{
int ret_val= 0;
IMService winService;
if (options.install_as_service)
{
if (winService.IsInstalled())
log_info("Service is already installed");
else if (winService.Install())
log_info("Service installed successfully");
else
{
log_info("Service failed to install");
ret_val= 1;
}
}
else if (options.remove_service)
{
if (! winService.IsInstalled())
log_info("Service is not installed");
else if (winService.Remove())
log_info("Service removed successfully");
else
{
log_info("Service failed to remove");
ret_val= 1;
}
}
else
ret_val= !winService.Init();
return ret_val;
}