![]() |
Vista PC mit NT-Service herunterfahren / Benutzer ausloggen
Hallo,
hat jemand eine Ahnung wie man aus einem NT-Service heraus Windows Vista herunterfahren kann ? Ich habe ![]() Mein Code:
Delphi-Quellcode:
InitiateSystemShutdown('', // shut down localhost
'Benutzer werden ausgeloggt !', // message to user 10, // time-out TRUE, // ask user to close apps FALSE); // reboot after shutdown Benötigt der Systemdienst bestimmte Privilegien um den Vista PC herunterzufahren ? KUBA |
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Zitat:
|
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
ja, stimmt. Herunterfahren geht auch, aber die Benutzerabmeldung funktioniert nicht im NT-Service.
Hier mein Code:
Delphi-Quellcode:
function MyExitWindows(RebootParam: Longword): Boolean; var TTokenHd: THandle; TTokenPvg: TTokenPrivileges; cbtpPrevious: DWORD; rTTokenPvg: TTokenPrivileges; pcbtpPreviousRequired: DWORD; tpResult: Boolean; const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd); if tpResult then begin tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid); TTokenPvg.PrivilegeCount := 1; TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; cbtpPrevious := SizeOf(rTTokenPvg); pcbtpPreviousRequired := 0; if tpResult then Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired); end; end; Result := ExitWindowsEx(RebootParam, 0); end; procedure TWDay.Button2Click(Sender: TObject); begin MyExitWindows(EWX_POWEROFF or EWX_FORCE); end; Warum funktioniert das Abmelden des Benutzers mit dem NT-Service nicht ? KUBA |
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Welche Funktion benutzt du denn nun? MyExitWindows oder doch InitiateSystemShutdown? :gruebel:
|
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Zitat:
kuba |
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Zitat:
|
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Hast du denn schon mal den Rückgabeparameter ausgewertet und mal geguckt, was das System für einen letzten Fehler meldet, wenn du InitiateSystemShutdown verwendest?
|
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Hallo Luckie,
leider kenne ich mich noch nicht so gut aus, wie kann ich die Rückgabeparameter auswerten ? Bei mir funktioniert das meiste per try and error, so habe ich Routine 2 mit EWX_SHUTDOWN versucht. Das funktioniert bei einem normalen Benutzer (wird abgemeldet), beim NT-Service fährt der PC jedoch runter und schaltet ab. kuba |
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
![]() Zitat:
|
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Da der PC herunterfährt müsste ich das Ergebnis irgendwo ablegen, z.B. in der Registry oder einem File ?
Kann mir jemand kurz erläutern (am besten mit einem kleinen Beispiel) wie ich den Rückgabewert herausfinde ? kuba |
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Zitat:
Routine 2 eledigt das mit SE_SHUTDOWN_NAME Privileg, es wird im NT-Dienst auch benötigt sonst passiert nichts. Aber das Ausloggen will mir nicht gelingen, der PC schaltet sich ab statt die Benutzer auszuloggen. Meine Vermutung geht dahin, dass ich dem System irgendwie mitteilen muss welcher Benutzer ausgeloggt werden soll - Da der Benutzer auf Vista Console "1" arbeitet und der NT-Service immer auf Vista Console 0 vermute ich dass der Systemdienst "sich abmeldet" und nicht den Benutzer. Es wäre für mich sehr hilfreich, wenn mir jemand erläutern könnte wie ich im NT-Service GetLastError abfragen kann. Ansonsten ... try and error :mrgreen: kuba |
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Zitat:
![]() und speziell im letzten Thread von ![]() |
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
@Der Kaktus
Den hab ich mir schon paar mal durchgelesen, hat mich jedoch nicht zum Ziel gebracht. Kein LogOff - immer PowerOff (bei Vista). Aber nochmal zu meiner o.g. Vermutung. Ich hab in meinem NT-Service einfach mal shutdown.exe /l /f gestartet, dabei habe ich ![]() Vielleicht habe ich mich oben etwas unklar ausgedrückt, ich meine jedenfalls dass der LogOff bei Vista mit "Benutzerrechten" initiiert werden muss und nicht mit "Systemrechten" ausgeführt werden darf, von 'WinSta0' im NT-Service. Und siehe da, es funktioniert :bounce2: Jetzt muss ich die Routine noch passend umstricken und dann solls wohl gehen ... kuba PS: ich würd auch abschalten wenn sich ein NT-Service "abmeldet" tschüüss... |
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Zitat:
|
Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog
Zitat:
Ich teste jedenfalls alles durch damit mein Programm "richtig" funzt :zwinker: kuba |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 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