Announcement

Collapse
No announcement yet.

Dienste ermitteln

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

  • Dienste ermitteln

    Der Titel sagt eigentlich schon alles aus was ich wissen möchte.
    Weiss jemand wie man Dienste und deren Status ermitteln kann?

    mfg Cre@or

  • #2
    http://msdn.microsoft.com/en-us/libr...29(VS.85).aspx

    http://msdn.microsoft.com/en-us/libr...47(VS.85).aspx
    Christian

    Comment


    • #3
      Moin Cre@or,

      Christian hat bereits die Übersicht gepostet, die alle nötigen Infos enthält.
      Hier noch ein paar Konkretisierungen:

      {--------------------------------------------}
      function MyAktServiceState(sServiceName: string): DWord;
      {--------------------------------------------}
      var
      iSCM, iSrvHdl : SC_HANDLE;
      begin
      Result := 0;

      iSCM := MyOpenSCManager; // Zugriff auf ServiceControlManagers
      if (iSCM > 0) then // Erfolg ?
      try
      iSrvHdl := MyOpenService(iSCM, sServiceName); // Zugriff auf Dienst
      if (iSrvHdl > 0) then // Erfolg ?
      try
      // Aktuellen Status abfragen
      Result := MyQueryServiceStatus(iSrvHdl).dwCurrentState; // Status
      finally
      MyCloseServiceHandle(iSrvHdl); // Handle auf Dienst freigeben
      end;
      finally
      MyCloseServiceHandle(iSCM); // Handle auf SCM freigeben
      end;
      end;

      {--------------------------------------------}
      function MyOpenSCManager(
      iAccess: DWord = SC_MANAGER_CONNECT+SC_MANAGER_ENUMERATE_SERVICE): SC_HANDLE;
      {--------------------------------------------}
      begin
      Result := OpenSCManager(nil, nil, iAccess);
      end;

      {--------------------------------------------}
      function MyOpenService(iSCHandle: SC_HANDLE; sServiceName: string;
      iAccess: DWord = SERVICE_START+SERVICE_STOP+SERVICE_QUERY_STATUS): SC_HANDLE;
      {--------------------------------------------}
      begin
      Result := OpenService(iSCHandle, PChar(sServiceName), iAccess);
      end;

      {--------------------------------------------}
      function MyCloseServiceHandle(iSCHandle: SC_HANDLE): boolean;
      {--------------------------------------------}
      begin
      Result := CloseServiceHandle(iSCHandle);
      end;

      {--------------------------------------------}
      function MyQueryServiceStatus(iSrvHdl: SC_HANDLE): TServiceStatus;
      {--------------------------------------------}
      begin
      FillChar(Result, SizeOf(TServiceStatus), 0);
      QueryServiceStatus(iSrvHdl, Result);
      end;

      Gruß,

      Geert

      Comment

      Working...
      X