-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathServiceControl.cpp
More file actions
92 lines (72 loc) · 1.8 KB
/
Copy pathServiceControl.cpp
File metadata and controls
92 lines (72 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "ServiceControl.h"
#include <windows.h>
DWORD ServiceInstall(LPCTSTR ServiceName,
LPCTSTR DisplayName,
LPCTSTR ExecPath)
{
SC_HANDLE SCManagerHandle;
SC_HANDLE ServiceHandle;
TCHAR Path[MAX_PATH];
DWORD Result;
if (ExecPath == NULL)
{
if (!GetModuleFileName(NULL, Path, MAX_PATH))
{
return GetLastError();
}
}
SCManagerHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (NULL == SCManagerHandle)
{
return GetLastError();
}
ServiceHandle = CreateService(
SCManagerHandle,
ServiceName,
DisplayName,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
Path,
NULL,
NULL,
NULL,
NULL,
NULL);
Result = GetLastError();
if (NULL == ServiceHandle)
{
goto Exit;
}
CloseServiceHandle(ServiceHandle);
Exit:
CloseServiceHandle(SCManagerHandle);
return Result;
}
DWORD ServiceUninstall(LPCTSTR ServiceName)
{
SC_HANDLE SCManagerHandle;
SC_HANDLE ServiceHandle;
DWORD Result;
SCManagerHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (NULL == SCManagerHandle)
{
return GetLastError();
}
ServiceHandle = OpenService(
SCManagerHandle,
ServiceName,
SERVICE_ALL_ACCESS);
if (NULL == ServiceHandle)
{
Result = GetLastError();
goto Exit;
}
DeleteService(ServiceHandle);
Result = GetLastError();
CloseServiceHandle(ServiceHandle);
Exit:
CloseServiceHandle(SCManagerHandle);
return Result;
}