Announcement
Collapse
No announcement yet.
Dienst unter Windows NT4.0
Collapse
X
-
Hallo,
es gibt API-Funktionen für den Zugriff auf den Service Control Manager (SCM) - wobei die Funktion <b>QueryServiceStatus</b> für die Abfrage des Service-Zustands zuständig ist. Das folgende Beispiel prüft nach, ob der als Parameter übergebene Service-Name bereits läuft und starten den Service, wenn er noch nicht läuft:
<pre>
function TM_START.StartMSTRService(SrvName: String): Boolean;
var
mgr: THandle;
svc: THandle;
status: TServiceStatus;
p: PChar;
s_name: String;
begin
Result := False;
mgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if mgr = 0 then
raise Exception.Create('Service-Manager nicht erreicht!');
svc := OpenService(mgr, PChar(SrvName), SERVICE_ALL_ACCESS);
if svc = 0 then
raise Exception.Create(Format('Service %s nicht gefunden!',[SrvName]));
QueryServiceStatus(svc, status);
// nur starten, wenn der Service nicht bereits läuft
if status.dwCurrentState <> SERVICE_RUNNING then
begin
p := nil;
StartService(svc, 0, p);
end;
CloseServiceHandle(svc);
CloseServiceHandle(mgr);
Result := True;
end;
</pre>
In Delphi 4 Client/Service Suite und in Delphi 5 Enterprise sind die VCL-Units <i>WinSvc</i> und <i>SvcMgr</i> vorhanden, die alle notwendigen Sachen deklarieren
Comment