Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Windows 2003 mit Konsolenanwendung neustarten (https://www.delphipraxis.net/56464-windows-2003-mit-konsolenanwendung-neustarten.html)

gsh 6. Nov 2005 11:10


Windows 2003 mit Konsolenanwendung neustarten
 
Hi DPler

Ich möchte gern des wenn meine Konsollenanwendung gestartet wird der Windows 200 Server neugestartet wird.

Mit dem Code:
Delphi-Quellcode:
function ExWindows(const AFlag: Word): Boolean;
var
  vi    : TOSVersionInfo;
  hToken : THandle;
  tp    : TTokenPrivileges;
  h     : DWord;
begin
  result:= false;

  vi.dwOSVersionInfoSize:=SizeOf(vi);

  if GetVersionEx(vi) then
  begin
    if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
      // Windows NT
      // Achtung bei Delphi 2 muß @hToken stehen ...
      if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
      begin
        LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
        tp.PrivilegeCount := 1;
        tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        h := 0;
        AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^, h);
        CloseHandle(hToken);
        result := ExitWindowsEx(Aflag, 0);
      end;
    end
    else
    begin // Windows 95
      Result := ExitWindowsEx(Aflag, 0);
    end;
  end;
end;

begin
  ExWindows(EWX_Reboot);
end.
geht des aber nicht.

Irgendwelche Idee wie der Code für 2003 ausschauen muss?

gsh 7. Nov 2005 23:31

Re: Windows 2003 mit Konsolenanwendung neustarten
 
*push*

Des muss doch gehen :duck:

retnyg 8. Nov 2005 02:17

Re: Windows 2003 mit Konsolenanwendung neustarten
 
wie wäre es wenn du einfach die shutdown.exe verwendest, die bei windows dabei ist ?

Luckie 8. Nov 2005 02:35

Re: Windows 2003 mit Konsolenanwendung neustarten
 
Warum debuggst du das nicht einfach mal und guckst dir die Rückgabewerte der API Funktionen an? natürlcih it der Fehler schwer zu finden, wenn man von vorneherein keinerlei Überprüfung der Rückgabewerte vornimmt.

So sieht es zum beispiel besser aus:
Delphi-Quellcode:
function EnablePrivilege(const Privilege: string; fEnable: Boolean; out
  PreviousState: Boolean): DWORD;
var
  Token       : THandle;
  NewState    : TTokenPrivileges;
  Luid        : TLargeInteger;
  PrevState   : TTokenPrivileges;
  Return      : DWORD;
begin
  PreviousState := True;
  if (GetVersion() > $80000000) then
    // Win9x
    Result := ERROR_SUCCESS
  else
  begin
    // WinNT
    if not OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, Token) then
      Result := GetLastError()
    else
    try
      if not LookupPrivilegeValue(nil, PChar(Privilege), Luid) then
        Result := GetLastError()
      else
      begin
        NewState.PrivilegeCount := 1;
        NewState.Privileges[0].Luid := Luid;
        if fEnable then
          NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
        else
          NewState.Privileges[0].Attributes := 0;
        if not AdjustTokenPrivileges(Token, False, NewState,
          SizeOf(TTokenPrivileges), PrevState, Return) then
          Result := GetLastError()
        else
        begin
          Result := ERROR_SUCCESS;
          PreviousState :=
            (PrevState.Privileges[0].Attributes and SE_PRIVILEGE_ENABLED <> 0);
        end;
      end;
    finally
      CloseHandle(Token);
    end;
  end;
end;
Da kann man wunderschön den Rückgabewert abfragen und gucken, was eventuell schiefgelaufen ist.

Christian Seehase 8. Nov 2005 08:59

Re: Windows 2003 mit Konsolenanwendung neustarten
 
Moin gsh,

das wird vermutlich deshalb nicht gehen, da ein 2003 Server, bei Standardinstallation, eine Begründung für einen Neustart abfragt.

Jelly 8. Nov 2005 09:19

Re: Windows 2003 mit Konsolenanwendung neustarten
 
Zitat:

Zitat von Christian Seehase
das wird vermutlich deshalb nicht gehen, da ein 2003 Server, bei Standardinstallation, eine Begründung für einen Neustart abfragt.

Das wollt ich auch grad sagen. Weiss denn einer wie man diese Begründung abschalten kann, so dass das System ohne blöde Frage neu startet.

NicoDE 8. Nov 2005 10:17

Re: Windows 2003 mit Konsolenanwendung neustarten
 
Zitat:

Zitat von Jelly
Zitat:

Zitat von Christian Seehase
das wird vermutlich deshalb nicht gehen, da ein 2003 Server, bei Standardinstallation, eine Begründung für einen Neustart abfragt.

Das wollt ich auch grad sagen. Weiss denn einer wie man diese Begründung abschalten kann, so dass das System ohne blöde Frage neu startet.

Vielleicht indem man bei MSDN-Library durchsuchenExitWindowsEx einen der MSDN-Library durchsuchenSystem Shutdown Reason Codes angibt...

Jelly 8. Nov 2005 10:26

Re: Windows 2003 mit Konsolenanwendung neustarten
 
Ich dachte da mehr dran in den Gruppenrichtlinien was zu ändern, hab aber bislang nichts gefunden.

Christian Seehase 8. Nov 2005 10:31

Re: Windows 2003 mit Konsolenanwendung neustarten
 
Moin Jelly,

gpedit.msc
Computerkonfiguration\Administrative Vorlagen\System
und hier der Punkt
Ereignisprotokollierung für Herunterfahren anzeigen.

Das funktioniert unter XP Pro und Server 2003

Jelly 8. Nov 2005 10:47

Re: Windows 2003 mit Konsolenanwendung neustarten
 
Danke :thumb:
Das hätt ich so nie gefunden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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