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;
|
请发表评论