Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde (https://www.delphipraxis.net/191887-windows-10-system-nicht-ausschalten-nachdem-windows-heruntergefahren-wurde.html)

TUX_der_Pinguin 28. Feb 2017 10:39

Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

mit folgendem Code lasse ich den Computer herunterfahren, jetzt möchte ich aber gerne das die gute alte Meldung "Es ist jetzt sicher den Computer auszuschalten" erscheint und nicht das der automatisch abgeschaltet wird. Dazu habe ich herausgefunden das es eine Option in den Gruppenrichtlinien (Computerkonfiguration\Administrative Vorlagen\System\System nicht ausschalten, nachdem Windows heruntergefahren wurde) gibt (siehe Anhang) und mit dem Flag 'SHUTDOWN_NOREBOOT' veranlasst man den Computer auch genau dieses zu tun. In der Theorie alles wunderbar und auch unter Windows 7 läuft alles so wie man es will, herunterfahren wird angestoßen, ggf. werden Updates installiert und im Anschluss bleibt der Rechner an und zeigt die Meldung. Unter Windows 10 Enterprise LTSB Evaluation Version funktioniert das jedoch nicht. Der Rechner fährt zwar herunter aber schaltet sich ab, entweder wird die Gruppenrichtline ignoriert oder der API Aufruf. :gruebel:

Hat jemand von euch eine Idee bzw. Erfahrung damit?

Delphi-Quellcode:
procedure WindowsShutDown( Computer: PChar; Msg: PChar; Time: Word; Force: Boolean; Reboot: Boolean );
var
  rl : Cardinal;
  hToken: THandle;
  tkp : TOKEN_PRIVILEGES;
  flags : DWORD;

begin
  {$WARN SYMBOL_PLATFORM OFF}

  Win32Check( OpenProcessToken( GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) );
  Win32Check( LookupPrivilegeValue( nil, 'SeShutdownPrivilege', tkp.Privileges[ 0 ].Luid ) );

  tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
  tkp.PrivilegeCount := 1;

  Win32Check( AdjustTokenPrivileges( hToken, False, tkp, 0, nil, rl ) );

  if Win32MajorVersion >= 6
  then
    begin
      // Flags
      if Reboot
      then
        flags := SHUTDOWN_FORCE_SELF or SHUTDOWN_GRACE_OVERRIDE or SHUTDOWN_RESTART
      else
        flags := SHUTDOWN_FORCE_SELF or SHUTDOWN_GRACE_OVERRIDE or SHUTDOWN_INSTALL_UPDATES or SHUTDOWN_NOREBOOT;

      // Befehl ausführen
      Win32CheckSuccess( InitiateShutdown( Computer, Msg, Time, flags, 0 ) );
    end
  else
    Win32Check( InitiateSystemShutdown( Computer, Msg, Time, Force, Reboot ) );

  {$WARN SYMBOL_PLATFORM ON}
end;

Der schöne Günther 28. Feb 2017 10:48

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Schau doch mal in die Doku zu InitiateShutdown , da steht es eigentlich ;-)

Aviator 28. Feb 2017 10:51

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Hast du die GPOs lokal über gpedit.msc eingetragen oder seid ihr in einer Domain wo das über den Server gemacht wird? Wenn letzteres zutrifft, welche Server-Version verwendet ihr?

jaenicke 28. Feb 2017 10:54

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Vielleicht ist die Beschreibung der Richtlinie ja tatsächlich ernst gemeint, und es funktioniert wirklich nur mit den beiden dort angegebenen Funktionen. Du verwendest ja eine andere (InitiateShutdown).

TUX_der_Pinguin 28. Feb 2017 11:03

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von Aviator (Beitrag 1362864)
Hast du die GPOs lokal über gpedit.msc eingetragen oder seid ihr in einer Domain wo das über den Server gemacht wird? Wenn letzteres zutrifft, welche Server-Version verwendet ihr?

Sowohl der Windows 7 als auch der Windows 10 Test Rechner sind nicht teil einer Domäne. Habe die GPOs lokal via gpedit.msc eingestellt.

TUX_der_Pinguin 28. Feb 2017 11:04

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von jaenicke (Beitrag 1362866)
Vielleicht ist die Beschreibung der Richtlinie ja tatsächlich ernst gemeint, und es funktioniert wirklich nur mit den beiden dort angegebenen Funktionen. Du verwendest ja eine andere (InitiateShutdown).

Das habe ich mir auch gedacht und war dann positiv überrascht das es unter Windows 7 doch ging. Tja ist das nun ein Bug bei Windows 7, das es funktioniert oder bei Windows 10, das es nicht funktioniert.

TUX_der_Pinguin 28. Feb 2017 11:05

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1362863)
Schau doch mal in die Doku zu InitiateShutdown , da steht es eigentlich ;-)

Vielleicht bin ich Blind aber was meint du? Ich habe ja auf Grund dieser Doku erst das Flag 'SHUTDOWN_NOREBOOT' gefunden.

Der schöne Günther 28. Feb 2017 11:16

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1362874)
Vielleicht bin ich Blind aber was meint du? Ich habe ja auf Grund dieser Doku erst das Flag 'SHUTDOWN_NOREBOOT' gefunden.

Ich meine das hier:

Zitat:

Beginning with InitiateShutdown running on Windows 8, you must include the SHUTDOWN_HYBRID flag with one or more of the flags in this table to specify options for the shutdown.

Beginning with Windows 8, InitiateShutdown always initiate a full system shutdown if the SHUTDOWN_HYBRID flag is absent.

Aviator 28. Feb 2017 11:27

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1362870)
Zitat:

Zitat von Aviator (Beitrag 1362864)
Hast du die GPOs lokal über gpedit.msc eingetragen oder seid ihr in einer Domain wo das über den Server gemacht wird? Wenn letzteres zutrifft, welche Server-Version verwendet ihr?

Sowohl der Windows 7 als auch der Windows 10 Test Rechner sind nicht teil einer Domäne. Habe die GPOs lokal via gpedit.msc eingestellt.

Hast du mal mit
Code:
gpresult /h gp.html
oder mit
Code:
rsop
geprüft, ob die GPOs überhaupt greifen? Damit wird eine HTML Datei erstellt in der alle Richtlinien aufgelistet sind.

Wenn du Mitglied einer Domain bist bin ich nicht sicher, ob die lokalen Richtlinien überhaupt noch greifen.

Falls nicht, müsstest du die Richtlinien mal am Server eintragen und dann die Tests ausführen. Alternativ kannst du das auch direkt am Sever in der Gruppenrichtlinienverwaltung testen indem du ein neues Gruppenrichtlinienergebnis Objekt erstellst und dann prüfst, ob die GPOs auf dem entfernten Rechner angewendet werden. Hierfür muss allerdings der RPC-Server auf dem zu prüfenden Rechner laufen und die Firewall muss entsprechend konfiguriert werden.

Welche Server Version von Windows Server verwendet ihr? 2008, 2008 R2, 2012, 2012 R2 oder 2016?

TUX_der_Pinguin 28. Feb 2017 11:38

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1362876)
Ich meine das hier:

Zitat:

Beginning with InitiateShutdown running on Windows 8, you must include the SHUTDOWN_HYBRID flag with one or more of the flags in this table to specify options for the shutdown.

Beginning with Windows 8, InitiateShutdown always initiate a full system shutdown if the SHUTDOWN_HYBRID flag is absent.

Ich habe mal die Flags um 'SHUTDOWN_HYBRID' erweitert, aber es funktioniert immer noch nicht. Wäre ja auch zu einfach gewesen.

Delphi-Quellcode:
      // Flags
      if Reboot
      then
        flags := SHUTDOWN_FORCE_SELF or SHUTDOWN_GRACE_OVERRIDE or SHUTDOWN_RESTART
      else
        flags := SHUTDOWN_FORCE_SELF or SHUTDOWN_GRACE_OVERRIDE or SHUTDOWN_HYBRID or SHUTDOWN_INSTALL_UPDATES or SHUTDOWN_NOREBOOT;

bra 28. Feb 2017 13:06

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Vielleicht gibt es die Funktion bei Windows 10 auch einfach nicht mehr? Mir erschließt sich sowieso nicht so wirklich der Sinn.

TUX_der_Pinguin 28. Feb 2017 13:15

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von bra (Beitrag 1362884)
Vielleicht gibt es die Funktion bei Windows 10 auch einfach nicht mehr? Mir erschließt sich sowieso nicht so wirklich der Sinn.

Es geht um eine Art Kiosk-System wo der Computer in einem Gehäuse steckt und wenn der PC heruntergefahren wird soll die Meldung "Jetzt ist es sicher den Computer auszuschalten" stehen. Damit der Anwender weiß wann er den Stecker ziehen kann. Schaltet sich der PC selbst ab geht der Monitor aus und der Anwender bekommt keine klare und eindeutige Rückmeldung ob er den Stecker ziehen kann.

Der Computer ist beim einschalten des Gerät so konfiguriert das er an geht so bald Strom da ist.

Dalai 28. Feb 2017 13:21

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1362885)
Damit der Anwender weiß wann er den Stecker ziehen kann. Schaltet sich der PC selbst ab geht der Monitor aus und der Anwender bekommt keine klare und eindeutige Rückmeldung ob er den Stecker ziehen kann.

Ein Fall für eine Master-/Slave-Steckdose/Verteilerleiste? Dann geht der Monitor aus, sobald der Rechner sich abschaltet.

Grüße
Dalai

TUX_der_Pinguin 28. Feb 2017 13:32

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von Dalai (Beitrag 1362886)
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1362885)
Damit der Anwender weiß wann er den Stecker ziehen kann. Schaltet sich der PC selbst ab geht der Monitor aus und der Anwender bekommt keine klare und eindeutige Rückmeldung ob er den Stecker ziehen kann.

Ein Fall für eine Master-/Slave-Steckdose/Verteilerleiste? Dann geht der Monitor aus, sobald der Rechner sich abschaltet.

Grüße
Dalai

Es gibt externen einen Schlüssel der die Stromversorgung von PC und Monitor regelt, Strom Ein -> PC fährt hoch und Monitor geht an. Dann kann man mit dem Gerät arbeiten, bis man damit fertig ist. Anschließend fährt man über die Anwendungssoftware (läuft im Kiosk-Modus) den PC herunter. Jetzt wäre sehr schön wenn die Meldung auf dem Bildschirm "Jetzt ist es sicher den Computer auszuschalten" käme. Damit der Anwender per Schlüssel wieder PC und Monitor vom Strom trennen kann. Nötig ist die Meldung nicht und wenn der PC aus ist kann man natürlich auch den Schlüssel umdrehen und den Strom trennen. Ich finde das da aber immer eine gewisse Unsicherheit herrscht ob der Computer wirklich aus ist, wenn der Monitor ausgegangen ist.

Also kurz um, Shutdown -> Meldung -> Stom trennen, so arbeiten die Geräte schon immer und die Anwender kennen es nicht anders. Da wäre es schön wenn man das beibehalten könnte. Ich mein die Optionen etc. gibt es ja auch in Windows 10, sie funktionieren nur nicht so wie z.B. unter Windows 7.

t.roller 28. Feb 2017 14:49

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von bra (Beitrag 1362884)
Vielleicht gibt es die Funktion bei Windows 10 auch einfach nicht mehr? Mir erschließt sich sowieso nicht so wirklich der Sinn.

Bei einem Tower/Mini-Tower o.ä. mit TV-Karte muss die Stromversorgung im Standby-Modus bleiben, wenn eine Aufnahme programmiert ist.

MediaCenter, Home Theater Personal Computer

Der schöne Günther 28. Feb 2017 16:58

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1362861)
In der Theorie alles wunderbar und auch unter Windows 7 läuft alles so wie man es will[...]

Ist die Hardware und Treiber auf beiden Systemen die du ausprobiert hast auch die gleiche?

Ich habe es gerade mal auf Win7 und Win10 ausprobiert - Dass es bei VMs (VirtualBox) nicht funktioniert sehe ich ein, aber auch ein echter PC mit Win7 zeigt genauso wenig ein "Sie können den PC jetzt ausschalten", sondern geht direkt aus.

Versucht mit
Delphi-Quellcode:
InitiateShutdown(..)
sowie
Delphi-Quellcode:
ExitWindowsEx(EWX_SHUTDOWN, 0)
, verhält sich beides so.

t.roller 28. Feb 2017 18:31

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Dieser Text erschien nur, wenn die Unterstützung für das
Advanced Power Management (APM) fehlte oder fehlerhaft war.

Willst Du bei einem modernen Wagen den (Hand-)Choke zurück?

himitsu 28. Feb 2017 19:07

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Wie wäre eine Hardwarelösung?

PowerLEDs vom Board nach außen leiten,
oder 'ne LED an die eine 5V-Leitung des ATX-Netzteils.

Das Board schaltet ja das Netzteil ab.
Die 5V-Standbyleitung des Netzteils bleibt aktiv, aber die Anderen werden abgeschaltet.
Und schon hat man 'ne Status-LED die anzeigt, ob der PC an oder aus ist, die bestimmt gut neben den Schlüsselschalter passt.


Zitat:

Dieser Text erschien nur, wenn die Unterstützung für das
Advanced Power Management (APM) fehlte oder fehlerhaft war.
Oder wenn man es im BIOS/UEFI deaktiviert hatte, denn über APM hat das OS dann mit dem letzten Befehl dem Board gesagt "geh jetzt aus", bzw. "schalte das Netzteil ab".

Der schöne Günther 28. Feb 2017 19:38

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Ich glaube ihr macht alle keine Kiosk-Systeme. Das haben zu wollen ist völlig legitim.

TUX_der_Pinguin 1. Mär 2017 08:52

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1362916)
Ich glaube ihr macht alle keine Kiosk-Systeme. Das haben zu wollen ist völlig legitim.

Richtig und danke Günther ;-)


Zitat:

Zitat von Der schöne Günther (Beitrag 1362899)
Ist die Hardware und Treiber auf beiden Systemen die du ausprobiert hast auch die gleiche?

Ich habe es gerade mal auf Win7 und Win10 ausprobiert - Dass es bei VMs (VirtualBox) nicht funktioniert sehe ich ein, aber auch ein echter PC mit Win7 zeigt genauso wenig ein "Sie können den PC jetzt ausschalten", sondern geht direkt aus.

Versucht mit
Delphi-Quellcode:
InitiateShutdown(..)
sowie
Delphi-Quellcode:
ExitWindowsEx(EWX_SHUTDOWN, 0)
, verhält sich beides so.

Bei deinen Versuchen hast du aber auch die GPO "System nicht ausschalten, nachdem Windows heruntergefahren wurde" aktiviert?


Alle 3 Systeme mit denen ich es getestet habe sind unterschiedlich, 2 x Windows 7 (Bei denen es funktioniert) und 1 x Windows 10 bei dem es nicht funktioniert. Ich probiere aber mal aus auf einem der Rechner auf denen es unter Windows 7 funktioniert ob es auch mit Windows 10 klappt, um als Ursache die Hardware auszuschließen.

himitsu 1. Mär 2017 09:20

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Der schöne Günther (Beitrag 1362916)
Ich glaube ihr macht alle keine Kiosk-Systeme.

Leider.

Der Entwickler/Designer/Erfinder von den Selbstbedienungskassen (nagelneu im letzten Jahr, mit Win9x (oder 2K im 9x-Style) geht da eindeutig niemals in diesen Läden einkaufen,
denn nur so kann ich mir die desaströse Benutzerführung und die vielen "Bitte warten sie auf den Betreuer" erklären.

TUX_der_Pinguin 1. Mär 2017 09:59

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Ok eine Überraschende Wendung hat sich ergeben, ich habe jetzt mal auf einem der Windows 7 Rechner (Die sich unter Windows 7 korrekt verhalten) Windows 10 installiert und siehe da der Rechner bleibt an und schaltet sich nicht aus. Blöd nur das keine Meldung (Es ist sicher den Computer auszuschalten) auf dem Bildschirm angezeigt wird sondern der Monitor einfach nur aus geht. :wall:

Und da im Windows 10 Test Rechner, mit dem ich das bisher getestet habe, ein AT-Netzteil drin steckt ist mir dieses Verhalten natürlich so nicht aufgefallen.

t.roller 1. Mär 2017 10:19

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Der Monitor kann/muss auch ausgehen, wenn er kein Signal von der Graphikkarte bekommt (Energy Saving) - unabhängig von dem anderen "Gedöns".

Der schöne Günther 1. Mär 2017 10:25

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Ja, aber er sollte ja eigentlich weiterhin ein Signal bekommen. Ich kenne mich mit der Hardware nicht so aus, vielleicht ging so etwas nur zu PCI-Zeiten, aber mit Onboard-Karten und/oder PCIe nicht mehr?

TUX_der_Pinguin 1. Mär 2017 10:58

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Der schöne Günther (Beitrag 1362946)
Ja, aber er sollte ja eigentlich weiterhin ein Signal bekommen. Ich kenne mich mit der Hardware nicht so aus, vielleicht ging so etwas nur zu PCI-Zeiten, aber mit Onboard-Karten und/oder PCIe nicht mehr?

Hardware hin oder her, unter Windows 7 funktioniert es ja. Nur Windows 10 ist aus welchen Gründen auch immer der Meinung die Meldung nicht anzeigen zu müssen und lieber den Bildschirm abschalten zu wollen.

So sieht die Meldung übrings bei Windows 7 aus, total unspektakulär und trotz einem deutschen Windows ist die Meldung englisch. :D
Anhang 46736

t.roller 1. Mär 2017 12:30

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
LOGO.SYS is in fact an 8-bit RLE-encoded Windows bitmap file with a resolution of exactly 320×400 pixels at 256 colors.

LOGO.SYS is a core system file used by Windows 9x operating systems to display its boot-up message.

It is present and used in the Windows 95, Windows 98, Windows 98 SE and Windows ME products. It is not present in the Windows NT family of operating systems, such as Windows XP.

LOGOS.SYS: the "It is now safe to turn off your computer" message. The file is located in the Windows directory. This message is displayed when Windows has successfully shut down to MS-DOS but is not configured to return to the prompt (COMMAND.COM) again.
On systems with proper ACPI support and ATX power supply, the PC may power down instead. If the file cannot be found, the same message is displayed in text mode. No error will be shown if the file cannot be found.

Luckie 1. Mär 2017 12:50

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Ich wollte schon die ganze zeit fragen, ob die Grafik überhaupt noch existiert. :?

bra 1. Mär 2017 12:55

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Zitat:

Zitat von Luckie (Beitrag 1362956)
Ich wollte schon die ganze zeit fragen, ob die Grafik überhaupt noch existiert. :?

Hat mich auch interessiert und ja, die ist bei Windows 10 auch noch da: ntoskrnl.exe mit 7Zip entpacken, da gibt es ein Bild, wo genau dieser Text drinsteht. Darum ist der auch in englisch und nicht lokalisiert ;)

Die Logo.sys ist was anderes, das ist nur der Startbildschirm.

t.roller 1. Mär 2017 13:12

AW: Windows 10 - System nicht ausschalten, nachdem Windows heruntergefahren wurde
 
Es gab Logo.sys, LogoS.sys und LogoW.sys.
https://en.wikipedia.org/wiki/LOGO.SYS


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