1,183
社区成员
发帖
与我相关
我的任务
分享
//开启服务
function StartServices(Const SvrName: String): Boolean;
var
a,b:SC_HANDLE;
c:PChar;
cErrCode :Cardinal;
begin
Result:=False;
a:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS{STANDARD_RIGHTS_EXECUTE});
if a <=0 then Exit;
b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS{SERVICE_START});
if b <=0 then Exit;
try
c := nil;
Result:=StartService(b,0,c);
CloseServiceHandle(b);
CloseServiceHandle(a);
cErrCode := GetLastError ;
if not Result and (cErrCode = ERROR_SERVICE_ALREADY_RUNNING) then
Result := True;
except
CloseServiceHandle(b);
CloseServiceHandle(a);
Exit;
end;
end;
{建立服务}
function CreateServices(Const SvrName,FilePath: String): Boolean;
var
a,b:SC_HANDLE;
Service: THandle;
begin
Result:=False;
if FilePath ='' then Exit;
a := OpenSCManager(nil,nil,{SC_MANAGER_CREATE_SERVICE}SC_MANAGER_ALL_ACCESS);
if a <= 0 then Exit;
try
Service := OpenService(a, PChar(SvrName), SERVICE_ALL_ACCESS);
if Service = 0 then
begin
b := CreateService(a,PChar(SvrName),
PChar(SvrName),
SERVICE_ALL_ACCESS,
SERVICE_INTERACTIVE_PROCESS or SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,
PChar(FilePath),nil,nil,nil,nil,nil);
if b <= 0 then
begin
ShowMessage( SysErrorMessage( GetlastError ));
Exit;
end;
end;
CloseServiceHandle(a);
CloseServiceHandle(b);
Result := True;
except
CloseServiceHandle(a);
CloseServiceHandle(b);
Exit;
end;
end;
procedure TService28.ServiceStart(Sender: TService; var Started: Boolean);
begin
Collector :=TCollectorThread.Create(False);
Collector.FreeOnTerminate := True;
Started := True;
end;
procedure TService28.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end
又改了一下还是不行。
procedure TService28.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := True;
end;
procedure TService28.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Collector.Terminate;
Stopped := True;
end;
procedure TService28.ServicePause(Sender: TService; var Paused: Boolean);
begin
Collector.Suspend;
Paused := True;
end;
procedure TService28.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
Collector.Resume;
Continued := True;
end;
procedure TService28.ServiceExecute(Sender: TService);
var
begin
while True do
begin
if......
begin
Collector :=TCollectorThread.Create(False);
Collector.FreeOnTerminate := True;
end;
end;
end;
这样做有问题吗