mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.4 KiB
58 lines
1.4 KiB
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <tchar.h>
|
|
|
|
|
|
BOOL
|
|
AddService(
|
|
LPTSTR ServiceName,
|
|
LPTSTR ImageName
|
|
)
|
|
{
|
|
SC_HANDLE hService;
|
|
SC_HANDLE hOldService;
|
|
SERVICE_STATUS ServStat;
|
|
|
|
|
|
if( !( hService = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS ) ) ) {
|
|
return FALSE;
|
|
}
|
|
if( hOldService = OpenService( hService, ServiceName, SERVICE_ALL_ACCESS ) ) {
|
|
if( ! ControlService( hOldService, SERVICE_CONTROL_STOP, & ServStat ) ) {
|
|
int fError = GetLastError();
|
|
if( ( fError != ERROR_SERVICE_NOT_ACTIVE ) && ( fError != ERROR_INVALID_SERVICE_CONTROL ) ) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
if( ! DeleteService( hOldService ) ) {
|
|
return FALSE;
|
|
}
|
|
if( ! CloseServiceHandle( hOldService ) ) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
if( ! CreateService( hService, ServiceName, ServiceName, SERVICE_ALL_ACCESS,
|
|
SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START,
|
|
SERVICE_ERROR_NORMAL, ImageName, NULL, NULL, NULL, NULL, NULL ) ) {
|
|
int fError = GetLastError();
|
|
if( fError != ERROR_SERVICE_EXISTS ) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
int _cdecl
|
|
main(
|
|
int argc,
|
|
char *argvA[]
|
|
)
|
|
{
|
|
if (!AddService( TEXT("Fax"), TEXT("faxsvc.exe") )) {
|
|
_tprintf( TEXT("could not add service\n") );
|
|
}
|
|
|
|
return 0;
|
|
}
|