summaryrefslogtreecommitdiff
path: root/server-tools/instance-manager/WindowsService.h
diff options
context:
space:
mode:
Diffstat (limited to 'server-tools/instance-manager/WindowsService.h')
-rw-r--r--server-tools/instance-manager/WindowsService.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/server-tools/instance-manager/WindowsService.h b/server-tools/instance-manager/WindowsService.h
new file mode 100644
index 00000000000..612eeda21e9
--- /dev/null
+++ b/server-tools/instance-manager/WindowsService.h
@@ -0,0 +1,43 @@
+#pragma once
+
+class WindowsService
+{
+protected:
+ bool inited;
+ const char *serviceName;
+ const char *displayName;
+ const char *username;
+ const char *password;
+ SERVICE_STATUS_HANDLE statusHandle;
+ DWORD statusCheckpoint;
+ SERVICE_STATUS status;
+ DWORD dwAcceptedControls;
+ bool debugging;
+
+public:
+ WindowsService(void);
+ ~WindowsService(void);
+
+ BOOL Install();
+ BOOL Remove();
+ BOOL Init();
+ BOOL IsInstalled();
+ void SetAcceptedControls(DWORD acceptedControls);
+ void Debug(bool debugFlag) { debugging= debugFlag; }
+
+public:
+ static void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
+ static void WINAPI ControlHandler(DWORD CtrlType);
+
+protected:
+ virtual void Run()= 0;
+ virtual void Stop() {}
+ virtual void Shutdown() {}
+ virtual void Pause() {}
+ virtual void Continue() {}
+ virtual void Log(const char *msg) {}
+
+ BOOL ReportStatus(DWORD currentStatus, DWORD waitHint= 3000, DWORD dwError=0);
+ void HandleControlCode(DWORD opcode);
+ void RegisterAndRun(DWORD argc, LPTSTR *argv);
+};