summaryrefslogtreecommitdiff
path: root/bin/bbackupd/Win32ServiceFunctions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'bin/bbackupd/Win32ServiceFunctions.cpp')
-rw-r--r--bin/bbackupd/Win32ServiceFunctions.cpp69
1 files changed, 54 insertions, 15 deletions
diff --git a/bin/bbackupd/Win32ServiceFunctions.cpp b/bin/bbackupd/Win32ServiceFunctions.cpp
index 89f02f62..b74c7e09 100644
--- a/bin/bbackupd/Win32ServiceFunctions.cpp
+++ b/bin/bbackupd/Win32ServiceFunctions.cpp
@@ -14,10 +14,12 @@
#include "Box.h"
-//#include <stdio.h>
-//#include <stdlib.h>
-#include <unistd.h>
-//#include <windows.h>
+#ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+#endif
+#ifdef HAVE_PROCESS_H
+ #include <process.h>
+#endif
extern void TerminateService(void);
extern unsigned int WINAPI RunService(LPVOID lpParameter);
@@ -31,18 +33,23 @@ HANDLE gStopServiceEvent = 0;
#define SERVICE_NAME "boxbackup"
+void ShowMessage(char *s)
+{
+ MessageBox(0, s, "Box Backup Message",
+ MB_OK | MB_SETFOREGROUND | MB_DEFAULT_DESKTOP_ONLY);
+}
+
void ErrorHandler(char *s, DWORD err)
{
char buf[256];
memset(buf, 0, sizeof(buf));
- snprintf(buf, sizeof(buf)-1, "%s (%d)", s, err);
+ _snprintf(buf, sizeof(buf)-1, "%s (%d)", s, err);
::syslog(LOG_ERR, "%s", buf);
MessageBox(0, buf, "Error",
MB_OK | MB_SETFOREGROUND | MB_DEFAULT_DESKTOP_ONLY);
ExitProcess(err);
}
-
void WINAPI ServiceControlHandler( DWORD controlCode )
{
switch ( controlCode )
@@ -88,7 +95,7 @@ void WINAPI ServiceControlHandler( DWORD controlCode )
VOID ServiceMain(DWORD argc, LPTSTR *argv)
{
- // initialise service status
+ // initialise service status
gServiceStatus.dwServiceType = SERVICE_WIN32;
gServiceStatus.dwCurrentState = SERVICE_STOPPED;
gServiceStatus.dwControlsAccepted = 0;
@@ -178,14 +185,19 @@ void InstallService(void)
scm = OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
- if (!scm) return;
+ if (!scm)
+ {
+ syslog(LOG_ERR, "Failed to open service control manager: "
+ "error %d", GetLastError());
+ return;
+ }
char cmd[MAX_PATH];
GetModuleFileName(NULL, cmd, sizeof(cmd)-1);
cmd[sizeof(cmd)-1] = 0;
char cmd_args[MAX_PATH];
- snprintf(cmd_args, sizeof(cmd_args)-1, "%s --service", cmd);
+ _snprintf(cmd_args, sizeof(cmd_args)-1, "%s --service", cmd);
cmd_args[sizeof(cmd_args)-1] = 0;
newService = CreateService(
@@ -194,12 +206,31 @@ void InstallService(void)
"Box Backup",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
- SERVICE_DEMAND_START,
+ SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
cmd_args,
0,0,0,0,0);
- if (newService) CloseServiceHandle(newService);
+ if (!newService)
+ {
+ ::syslog(LOG_ERR, "Failed to create Box Backup service: "
+ "error %d", GetLastError());
+ return;
+ }
+
+ ::syslog(LOG_INFO, "Created Box Backup service");
+
+ SERVICE_DESCRIPTION desc;
+ desc.lpDescription = "Backs up your data files over the Internet";
+
+ if (!ChangeServiceConfig2(newService, SERVICE_CONFIG_DESCRIPTION,
+ &desc))
+ {
+ ::syslog(LOG_WARNING, "Failed to set description for "
+ "Box Backup service: error %d", GetLastError());
+ }
+
+ CloseServiceHandle(newService);
CloseServiceHandle(scm);
}
@@ -210,23 +241,31 @@ void RemoveService(void)
scm = OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);
- if (!scm) return;
+ if (!scm)
+ {
+ syslog(LOG_ERR, "Failed to open service control manager: "
+ "error %d", GetLastError());
+ return;
+ }
service = OpenService(scm, SERVICE_NAME, SERVICE_ALL_ACCESS|DELETE);
ControlService(service, SERVICE_CONTROL_STOP, &status);
if (!service)
{
- printf("Failed to open service manager");
+ syslog(LOG_ERR, "Failed to open Box Backup service: "
+ "error %d", GetLastError());
return;
}
+
if (DeleteService(service))
{
- printf("Service removed");
+ syslog(LOG_INFO, "Box Backup service deleted");
}
else
{
- printf("Failed to remove service");
+ syslog(LOG_ERR, "Failed to remove Box Backup service: "
+ "error %d", GetLastError());
}
CloseServiceHandle(service);