Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi rausfinden welche Anwendung den Shutdown von Windows verhindert (https://www.delphipraxis.net/168986-rausfinden-welche-anwendung-den-shutdown-von-windows-verhindert.html)

Helmi 21. Jun 2012 17:38

rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Hallo,

ist es möglich und falls ja wie, rauszufinden welche Anwendung den Shutdown von Windows (XP) verhindert?

Ich habe das Problem dass auf meinem Firmen-Laptop bei einem Benutzer meistens der Shutdown nicht funktioniert. Er wird einfach nicht ausgeführt.
(also über Start --> Herunterfahren (oder Abmelden oder Neustarten))

Nutze ich diesen Code um runterzufahren funktioniert es problemlos:
Delphi-Quellcode:
function ExitWindows(RebootParam: Longword): Boolean;
//mögliche RebootParam:
//EWX_POWEROFF or EWX_FORCE = shutdown
//EWX_REBOOT or EWX_FORCE  = reboot
//EWX_LOGOFF or EWX_FORCE  = logoff
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
            AdjustTokenPrivileges(TTokenHd, false, TTokenPvg, cbtpPrevious,
                                  rTTokenPvg, pcbtpPreviousRequired);
        end;
    end;

  Result := ExitWindowsEx(RebootParam, 0);
end;
Ich würde mir gerne eine Anwendung schreiben die rausfindet welche Anwendung den Shutdown verhindert.
Ich bin mir bewusst, dass dann diese Anwendung ebenfalls den Shutdown verhindert, aber dies ist ja gewollt.

himitsu 21. Jun 2012 18:23

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Tja, es gibt tausende Möglichkeiten, soetwas zu verhindern.


Nja, erstmal könntest du allen Anwendungen die Shoutdown-Message senden.
Wenn dort eine sagt "nö, ich will nich", dann isses die, welche den Shoutdown "ordentlich" unterbricht.

Dabei könnte man auch gleich schauen ob irgendwe garnicht auf Messages reagiert, also hängt. (wobei man hier eventuell mit Konsolenanwendungen auspassen müßte? )

Dann vielleicht noch nachsehn, ob irgendwe ein "modales Fenster" besitzt, wie z.B. eine Messagebox, welche auf eine Benutzereingabe reagiert.
(hier währe es ja witzig, wenn Windows in dem Warten-Fenster die Message und die Button anzeigt ... bei mir hatte es mal lange auf die "Wurde geändert, soll ich speichern?"-Frage des Notepad oder vom Delphi gewartet)

Und dann kannst du allen noch die Terminate-Messages senden und sehen, wer sich nicht (nach einer gewissen Zeit) beendet.

Und dann .... tja, lange genug warten und das machen, was windows beim "schnellen Runterfahren" macht ... alles was sich nicht beendet einfach "killen" und was nicht verschwindet, hängt wohl mit irgendwelchen Treibergeschichten fest.

Und dann ein Relaise via USB ansteuern und den Strom abschalten. :stupid:
Wenn da nicht irgendwann aus aus geht, sofort zum Patentamt rennen und den Nobelpreis beantragen.

Stevie 21. Jun 2012 18:28

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Ich rat mal ins blaue: dexplore.exe (das Ding, was die Delphi Hilfe benutzt) ;)

Dalai 21. Jun 2012 18:28

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Normalerweise zeigt Windows doch an, wenn eine Anwendung klemmt. Wenn Windows das nicht tut, kann es auch ein Dienst sein, dessen Behinderung aber in der Ereignisanzeige vermerkt wird. Aber auch sonst kann ein Blick in die Ereignisanzeige nicht schaden. Um zumindest die Anwendungen nach einer Wartezeit zu töten, könnte dies hilfreich sein:
Code:
[HKEY_CURRENT_USER\Control Panel\Desktop]
"AutoEndTasks"="1"
"WaitToKillAppTimeout"="20000"
Der Wert von WaitToKillAppTimeout ist in Millisekunden anzugeben, hier also 20 Sekunden.

MfG Dalai

himitsu 21. Jun 2012 18:32

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Zitat:

Zitat von Stevie (Beitrag 1171971)
Ich rat mal ins blaue: dexplore.exe (das Ding, was die Delphi Hilfe benutzt) ;)

Wobei ich immernoch nicht weiß, wieso man dort überhaupt einen Code einbaut, der das Runterfahren behindert.
Nja, im VisualStudio soll ja angeblich eine neue Variante eingebaut sein, welche diesen Bug nicht mehr besitzt. ( nur warum veröffentlicht man nicht für alle diese Version? )

Egal, mit Windows 8 fährt man Rechner sowieso nicht mehr runter, also stört's bald nicht mehr. :angle:

Stevie 22. Jun 2012 13:37

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Zitat:

Zitat von himitsu (Beitrag 1171973)
Zitat:

Zitat von Stevie (Beitrag 1171971)
Ich rat mal ins blaue: dexplore.exe (das Ding, was die Delphi Hilfe benutzt) ;)

Wobei ich immernoch nicht weiß, wieso man dort überhaupt einen Code einbaut, der das Runterfahren behindert.
Nja, im VisualStudio soll ja angeblich eine neue Variante eingebaut sein, welche diesen Bug nicht mehr besitzt. ( nur warum veröffentlicht man nicht für alle diese Version? )

Egal, mit Windows 8 fährt man Rechner sowieso nicht mehr runter, also stört's bald nicht mehr. :angle:

Wahrscheinlich hat Emba nicht genügend Ressourcen, um ihre Hilfe auf das Microsoft Help System Format umzustellen (gibt's schon ca 2 Jahre afaik) - daher wird vermutlich auch dieses Jahr wieder die OH mit dem unsäglichen Document Explorer ausgeliefert (ich lasse mich natürlich gerne positiv überraschen).

Übrigens gibt es das herunterfahren Problem schon spätestens mit Win7 nicht mehr (Vista weiß ich nicht).

himitsu 22. Jun 2012 13:48

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
OK, ob das Runterfahren noch hängt, weiß ich nicht (wir fahren unsere Rechner selten runter),
aber die dexplore selber hängt auf jeden Fall manchmal immernoch (Win7, Server2008R2 und WHS2011)

alphaflight83 22. Jun 2012 13:53

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Zitat:

Zitat von himitsu (Beitrag 1172063)
...aber die dexplore selber hängt auf jeden Fall manchmal immernoch (Win7)

Jop, kann ich bestätigen.

Bernhard Geyer 22. Jun 2012 15:46

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Zitat:

Zitat von Stevie (Beitrag 1172062)
Wahrscheinlich hat Emba nicht genügend Ressourcen, um ihre Hilfe auf das Microsoft Help System Format umzustellen (gibt's schon ca 2 Jahre afaik)

Oder man wartet auf das nächte MS Help-Format. Nach 2 Jahren wäre es doch mal (im Zusammenhang mit Win8) hier mal wieder was neues aufzustzen :stupid:

Stevie 23. Jun 2012 20:08

AW: rausfinden welche Anwendung den Shutdown von Windows verhindert
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1172071)
Zitat:

Zitat von Stevie (Beitrag 1172062)
Wahrscheinlich hat Emba nicht genügend Ressourcen, um ihre Hilfe auf das Microsoft Help System Format umzustellen (gibt's schon ca 2 Jahre afaik)

Oder man wartet auf das nächte MS Help-Format. Nach 2 Jahren wäre es doch mal (im Zusammenhang mit Win8) hier mal wieder was neues aufzustzen :stupid:

Die machen das wahrscheinlich genauso, wie ihre eigenen Kunden und kaufen nicht jedes Jahr ne neue Version :twisted:


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