![]() |
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:
geht des aber nicht.
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. Irgendwelche Idee wie der Code für 2003 ausschauen muss? |
Re: Windows 2003 mit Konsolenanwendung neustarten
*push*
Des muss doch gehen :duck: |
Re: Windows 2003 mit Konsolenanwendung neustarten
wie wäre es wenn du einfach die shutdown.exe verwendest, die bei windows dabei ist ?
|
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:
Da kann man wunderschön den Rückgabewert abfragen und gucken, was eventuell schiefgelaufen ist.
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; |
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. |
Re: Windows 2003 mit Konsolenanwendung neustarten
Zitat:
|
Re: Windows 2003 mit Konsolenanwendung neustarten
Zitat:
![]() ![]() |
Re: Windows 2003 mit Konsolenanwendung neustarten
Ich dachte da mehr dran in den Gruppenrichtlinien was zu ändern, hab aber bislang nichts gefunden.
|
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 |
Re: Windows 2003 mit Konsolenanwendung neustarten
Danke :thumb:
Das hätt ich so nie gefunden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz