AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Vista PC mit NT-Service herunterfahren / Benutzer ausloggen
Thema durchsuchen
Ansicht
Themen-Optionen

Vista PC mit NT-Service herunterfahren / Benutzer ausloggen

Ein Thema von kuba · begonnen am 16. Aug 2009 · letzter Beitrag vom 17. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#1

Vista PC mit NT-Service herunterfahren / Benutzer ausloggen

  Alt 16. Aug 2009, 20:47
Hallo,

hat jemand eine Ahnung wie man aus einem NT-Service heraus Windows Vista herunterfahren kann ?

Ich habe InitiateSystemShutdown versucht, aber Windows Vista macht nichts.

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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 16. Aug 2009, 21:47
Zitat:
To shut down the local computer, the calling thread must have the SE_SHUTDOWN_NAME privilege
steht doch ganz unten auf der verlinkten Seite.
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 16. Aug 2009, 22:04
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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 16. Aug 2009, 22:17
Welche Funktion benutzt du denn nun? MyExitWindows oder doch InitiateSystemShutdown?
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 16. Aug 2009, 22:39
Zitat von ringli:
Welche Funktion benutzt du denn nun? MyExitWindows oder doch InitiateSystemShutdown?
Die erste funktioniert gar nicht (hab ich auch geschrieben). Die zweite fährt den PC herunter, es funktioniert jedoch nicht mit dem Benutzer ausloggen.

kuba
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
504 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 17. Aug 2009, 08:07
Zitat von kuba:
Die erste funktioniert gar nicht (hab ich auch geschrieben). Die zweite fährt den PC herunter, es funktioniert jedoch nicht mit dem Benutzer ausloggen.
Hast du denn mal MagicAndre's Hinweis beachtet? Ich hatte mir auf die Schnelle ein VCL-Testprojekt mit InitiateSystemShutdown geschrieben das erst auch nicht funktionierte. Nachdem ich das SE_SHUTDOWN_NAME-Privileg aktiviert habe, funktionierte es. Ob sich die Funktion allerdings aus einem Dienst heraus aufrufen lässt habe ich nicht probiert da ich bisher noch keinen Dienst programmiert habe.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 17. Aug 2009, 08:47
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 17. Aug 2009, 09:00
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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 17. Aug 2009, 09:04
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
Zitat:
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Vista PC mit NT-Service herunterfahren / Benutzer auslog

  Alt 17. Aug 2009, 09:10
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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.
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