Delphi服务程序注册与卸载
uses winsvc;
function InstallService(ServiceName, DisplayName, FileName:
string): boolean;
var
SCManager,Service: THandle;
Args:
pchar;
begin
Result := False;
SCManager := OpenSCManager(nil, nil,
SC_MANAGER_ALL_ACCESS);
if SCManager = 0 then Exit;
try
Service :=
CreateService(SCManager, //句柄
PChar(ServiceName),
//服务名称
PChar(DisplayName), //显示服务名
SERVICE_ALL_ACCESS, //服务访问类型
SERVICE_WIN32_OWN_PROCESS,
//服务类型 or SERVICE_INTERACTIVE_PROCESS
SERVICE_AUTO_START,
//自动启动服务
SERVICE_ERROR_IGNORE,
//忽略错误
PChar(FileName), //启动的文件名
nil, //name of load ordering group (载入组名) 'LocalSystem'
nil, //标签标识符
nil, //相关性数组名
nil,
//帐户(当前)
nil); //密码(当前)
Args := nil;
StartService(Service, 0, Args);
CloseServiceHandle(Service);
finally
CloseServiceHandle(SCManager);
end;
Result :=
True;
end;
procedure UninstallService(ServiceName:
string);
var
SCManager,Service: THandle;
ServiceStatus:
SERVICE_STATUS;
begin
SCManager := OpenSCManager(nil, nil,
SC_MANAGER_ALL_ACCESS);
if SCManager = 0 then Exit;
try
Service :=
OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
ControlService(Service, SERVICE_CONTROL_STOP, ServiceStatus);
DeleteService(Service);
CloseServiceHandle(Service);
finally
CloseServiceHandle(SCManager);
end;
end;
procedure
ServiceCtrlHandler(Control: dword); stdcall;
begin
case Control of
SERVICE_CONTROL_STOP:
begin
Stopped := True;
Status.dwCurrentState := SERVICE_STOPPED;
end;
SERVICE_CONTROL_PAUSE:
begin
Paused := True;
Status.dwcurrentstate := SERVICE_PAUSED;
end;
SERVICE_CONTROL_CONTINUE:
begin
Paused := False;
Status.dwCurrentState := SERVICE_RUNNING;
end;
SERVICE_CONTROL_INTERROGATE: ;
SERVICE_CONTROL_SHUTDOWN: Stopped :=
True;
end;
SetServiceStatus(StatusHandle, Status);
end;