Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi NT Service unter XP beenden? (https://www.delphipraxis.net/4031-nt-service-unter-xp-beenden.html)

Delphi-Coder 11. Apr 2003 21:22


NT Service unter XP beenden?
 
Hallo,

wie kann ich einen NT Service unter Win XP beenden? Das Problem an der sache ist, dass ich nicht als Admin dabei eingeloggt bin! Gibts da irgendwelche Wege? Ist wirklich sehr wichtig!

Schonmal Danke im voraus!

Schönen Abend noch!
Delphi-Coder

Jelly 11. Apr 2003 22:32

Hi,

um Services zu starten/stoppen musst du nicht unbedingt Admin sein, sondern du brauchst einfach die Rechte, Services zu starten und zu stoppen. Hast du die nicht, haste de keine Chance. Aber hier mal bischen Code zum Starten und Stoppen eines NT Services:

Start:
Code:
function ServiceStart(aMachine, aServiceName: String): Boolean;
// aMachine is UNC path or local machine if empty
var
  h_manager, h_svc: SC_Handle;
  ServiceStatus: TServiceStatus;
  dwCheckPoint: DWORD;
  ServiceArgVectors : PChar ;
begin
  h_manager := OpenSCManager(PChar(aMachine), nil,SC_MANAGER_CONNECT);
  if h_manager > 0 then
  begin
    h_svc := OpenService(h_manager, PChar(aServiceName),
                         SERVICE_START or SERVICE_QUERY_STATUS);
    if h_svc > 0 then
    begin
      if (StartService(h_svc, 0, ServiceArgVectors)) then { succeeded } 
      begin
        if (QueryServiceStatus(h_svc, ServiceStatus))then
        begin
          while (SERVICE_RUNNING <> ServiceStatus.dwCurrentState)do
          begin
            dwCheckPoint := ServiceStatus.dwCheckPoint;
            Sleep(ServiceStatus.dwWaitHint);
            if (not QueryServiceStatus(h_svc,ServiceStatus)) then
              // couldn't check status
              break;
            if (ServiceStatus.dwCheckPoint < dwCheckPoint)then
              break;
          end;
        end;
      end;
      CloseServiceHandle(h_svc);
    end;
    CloseServiceHandle(h_manager);
  end;

  Result := (SERVICE_RUNNING = ServiceStatus.dwCurrentState);
end;
und zum Stoppen:
Code:
function ServiceStop(aMachine, aServiceName:String): Boolean;
// aMachine is UNC path or local machine if empty
var
  h_manager, h_svc: SC_Handle;
  ServiceStatus: TServiceStatus;
  dwCheckPoint: DWORD;
begin
  h_manager := OpenSCManager(PChar(aMachine), nil,SC_MANAGER_CONNECT);
  if h_manager > 0 then
  begin
    h_svc := OpenService(h_manager, PChar(aServiceName),
                         SERVICE_STOP or SERVICE_QUERY_STATUS);
    if h_svc > 0 then
    begin
      if (ControlService(h_svc, SERVICE_CONTROL_STOP,ServiceStatus)) then
      begin
        if (QueryServiceStatus(h_svc, ServiceStatus))then
        begin
          while (SERVICE_STOPPED <> ServiceStatus.dwCurrentState)do
          begin
            dwCheckPoint := ServiceStatus.dwCheckPoint;
            Sleep(ServiceStatus.dwWaitHint);
            if (not QueryServiceStatus(h_svc,ServiceStatus)) then
              // couldn't check status
              break;
            if (ServiceStatus.dwCheckPoint < dwCheckPoint)then
              break;
          end;
        end;
      end;
      CloseServiceHandle(h_svc);
    end;
    CloseServiceHandle(h_manager);
  end;

  Result := (SERVICE_STOPPED = ServiceStatus.dwCurrentState);
end;
Gruß,
Tom

Delphi-Coder 12. Apr 2003 08:52

Danke für die schnelle Antwort! Was muss ich denn für die Variable aMachine an die Funktion übergeben?

sakura 12. Apr 2003 11:47

Einen Punkt '.', wenn es der gleiche Rechner ist sollte genügen.

...:cat:...

Delphi-Coder 12. Apr 2003 12:30

Danke für die Hilfe! Es gibt da nur ein kleines Problem: Ich bin nicht als Admin eingeloggt und hab nicht die Berechtigung einen Service zu beenden!!! :( Gibt es da wirklich keinen anderen Weg???

sakura 12. Apr 2003 12:39

Zitat:

Zitat von Delphi-Coder
hab nicht die Berechtigung einen Service zu beenden!!! :( Gibt es da wirklich keinen anderen Weg???

Nein, dafür sind die Rechte ja geschaffen worden ;-)

...:cat:...

RobertS 27. Jul 2003 10:28

Re: NT Service unter XP beenden?
 
Huhu,

also ich habe mir auch mal den Code vorgenommen und versucht einen Service zu starten, leider passiert garnichts.

Muss ich bei Servie Name den Namen übergeben den ich auch bei den Diensten angezeigt bekomme? Also z.B "pcAnywhere Host Service"

Danke im voraus

Gast 27. Jul 2003 10:34

Re: NT Service unter XP beenden?
 
Nein, den Schlüsselnamen eines Unterschlüssels von:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es
mußt du angeben. Da liegen all die Services :)

PS: Wenn du Debugrechte hast, kannste dir SYSTEM-Rechte holen und dann den Service starten/stoppen.

Motzi 27. Jul 2003 12:52

Re: NT Service unter XP beenden?
 
Sofern du das SeDebugPrivilege hast (und auch aktiviert hast) kannst du dir ein gültiges Process-Handle auf den Service holen und ihn per TerminateProcess abschießen...

Motzi 27. Jul 2003 12:53

Re: NT Service unter XP beenden?
 
Zitat:

Zitat von dReM2nUtD3yZYpRco7D6ZOA
PS: Wenn du Debugrechte hast, kannste dir SYSTEM-Rechte holen und dann den Service starten/stoppen.

Aso? Davon hab ich noch nix gehört... wie soll denn das gehn?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz