Announcement

Collapse
No announcement yet.

Dienst unter Windows NT4.0

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dienst unter Windows NT4.0


  • #2
    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

    Working...
    X