Windows Schnellstart aktiviert? (Hyperboot)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von dive26.

    Windows Schnellstart aktiviert? (Hyperboot)

    Hallo Leute,

    ab Windows 8.1 gibt es die Funktion "Schnellstart aktivieren (empfohlen)" welche default immer aktiviert ist. Leider werden bei aktivierter Hyperboot-Funktion aber einige Gerätetreiber beim Neustart nicht ordnungsgemäß gestartet und meine Anwendung kann dann nicht auf die Smartcards zugreifen.

    Gibt es irgendwie die Möglichkeit aus VB.NET heraus festzustellen ob der Windows Schnellstart (Hyperboot) aktiviert oder deaktiviert ist?

    Idealerweise wäre die Möglichkeit zum programmgesteuerten Ausschalten dieser Option, aber da dies wohl nicht ohne Adminrechte funktionieren würde, habe ich mich davon schon verabschiedet.

    Liebe Grüße
    Roland
    Bilder
    • 3.jpg

      182 kB, 885×529, 170 mal angesehen
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dive26“ ()

    dive26 schrieb:

    die Möglichkeit zum programmgesteuerten Ausschalten
    hast Du sehr wohl auch ohne Admin-Rechte, gugst Du z.B. hier.
    Du kannst ggf. Deinen Hardwarezugriff in Try/Catch packen, das musst Du aber testen, da unmanaged Exceptions nicht unbedingt von NET Try abgefangen werden.
    Dies könntest Du allerdings mit einer eigenen CLI/C++-DLL sicher lösen, indem Du dort die unmanaged Exception auffangen und als managed Exception hochreichen kannst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für den Link, aber der hilft mir nicht weiter.
    Ich möchte weder herunterfahren noch neu starten, sondern nur feststellen ob "Schnellstart" aktiviert ist.

    Das Programmgesteuerte Ausschalten bezog sich auf den "Schnellstart".
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26 Ich dachte, Du wolltest wissen, ob Du auf Deine Hardware zugreifen kannst.
    ====
    Das sollte aber in der Registry stehen.
    Nimm einen Registry-Lauscher und ändere den Eintrag in der Systemsteuerung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank. Mit Registry-Auslesen hat es funktioniert:

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Ermittelt ob der Schnellstartmodus in Windows ab 8.1 aktiviert ist und gibt eine entsprechende Meldung aus
    3. ''' </summary>
    4. ''' <remarks></remarks>
    5. Public Sub PruefeHyberboot()
    6. Try
    7. Dim readValue = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Power", "HiberbootEnabled", Nothing)
    8. Dim Wert As String = "" & readValue
    9. If Wert = "1" Then
    10. ' Hyberboot aktiviert - bitte deaktivieren
    11. MessageBox.Show("Sie sollten den Windows-Schnellstart Modus deaktivieren, damit der Register nach einem Computer-Kaltstart ordnungsgemäß funktioniert!" + vbCrLf + vbCrLf + "(Systemsteuerung > Energieoptionen > Netzschalteroptionen > Schnellstart)", "Empfehlung!", MessageBoxButtons.OK, MessageBoxIcon.Information)
    12. Process.Start("powercfg.cpl")
    13. End If
    14. Catch
    15. End Try
    16. End Sub
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Hallo 3Angle,

    1) Ich habe das ganze unter Win7, Win8.1 und Win10 getestet. Bei Win 8.1 und 10 gibts den Registry-Eintrag, bei Win 8.0, Win7 und Vista nicht. Fehlermeldung gibts keine, falls der Registry-Eintrag nicht existiert. Daher finde ich eine extra Betriebssystem-Abfrage davor unnötigen Aufwand.
    Das Try-Catch ist nur zur Sicherheit für alle Fälle gedacht.

    2) Es handelt sich hierbei um eine Registrierkasse. Die Einstellung MUSS deaktivert werden, sonst ist die Registrierkasse nicht ordnungsgemäß verwendbar. Daher erübrigt sich die Frage an den User ob man die Einstellung öffnen möchte.

    Deine Ratschläge sind gut gemeint, aber bei meinen Zielkunden muss man alles vorgeben und einen exakten Ablauf defnieren. Eine freie Entscheidung wäre hier nur hinderlich.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    1) War nur eine Möglichkeit die zwanghafte Fehlermeldung bei Windows 7 oder früher zu verhindern.
    2) Dann würde ich die Formulierung von "sollten" auf "müssen" ändern.

    Weiterer Vorschlag: Was spricht dagegen den Registereintrag selbst zu ändern ohne die Einstellungsoberfläche von Windows?
    Hallo 3Angel,

    1) Es gibt ja ohnehin keine Fehlermeldung unter Windows 7. Wie geschrieben ist das Try-Catch nur eine Sicherheitsmaßnahme falls doch mal ein Rechner unvorhersehbar reagiert.
    2) Dein Vorschlag den Registriereingrag selbst zu ändern ist genau das Gegenteil von "Frag den Nutzer ob dieser die Einstellung ändern will bevor die Einstellungen geöffnet werden" ;-).

    Die Lösung ist für meine Anwendung so wie Sie jetzt ist optimal.

    Wie mein Techniker/Supporter gestern schon treffend über Euch sagte:
    "Die sind sicher alle auf ihrem Gebiet (Programmieren) Koryphäen, aber niemand von denen denkt an den Support danach ..."
    Damit meinte er, dass man den Kunden manchmal eben NICHT die Wahl lassen darf, da sonst der Supportaufwand sehr sehr hoch wird - und das kostet bei mittlerweile 2500 Kunden einfach Zeit = Geld ;-) . Speziell wenn die Anwendung so komplex ist wie unsere. Da ist die oben beschriebene Funktion nur ein Promille aller Funktionen.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26 Zunächst muss in der Betriebsanleitung der Kasse stehen, dass der Eintrag deaktiviertr sein muss. Es gibt nämlich überall Sportler und Aufräumprogramme, die davon nix wissen.
    Eigenlich dürfte doch nur der Autostart eines Programmes schief gehen können, denn die registrierten Treiber werden in jedem Falle geladen, ggf. halt etwas später.
    Vielleicht machst Du Dir ein Starter-Programm, das das Starten des Treibers feststellt und dann Dein Hauptprogramm startet oder ggf. eine Fehlermeldung ausgibt.
    Und ernn Dein Programm selbst das überwacht, muss die GUI halt eine Minute hinter einem Splash-Screen warten, bis der Treiber da ist.
    Ggf, ist es sogar möglich, Deinem Treiber eine höhere Priorität mitzugeben, dass er bevorzugt gestartet wird.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke Rod,

    Eigenlich dürfte doch nur der Autostart eines Programmes schief gehen können, denn die registrierten Treiber werden in jedem Falle geladen, ggf. halt etwas später.


    Die Betonung liegt auf "Eigentlich". Dieses Phänomen der nicht ordnungsgemäß geladenen Treiber bei aktiviertem Windows-Schnellstart haben mehrere unabhängige Programmierer das gesamte letzte Jahr über gehabt und der Fehler wurde nach langem Suchen im Windows-Schnellstart ermittelt. Der Treiber kommt leider nicht von alleine wieder. Erst ein Windows Neustart (kein Kaltstart) würde den Treiber ordnungsgemäß laden. Das ist aber für den Kunden nicht zumutbar. Oder eben das Deaktivieren des Schnellstart-Modus. Zweiteres ist kundenfreundlicher.

    Vielleicht machst Du Dir ein Starter-Programm, das das Starten des Treibers feststellt und dann Dein Hauptprogramm startet oder ggf. eine Fehlermeldung ausgibt.

    Und was nützt dem Gastwirt um 12:00 Mittags wenn da eine Fehlermeldung kommt. Ist doch besser es funktioniert und es kommt keine Fehlermeldung (siehe meine Signatur zu diesem Thema ;-)).

    Zunächst muss in der Betriebsanleitung der Kasse stehen, dass der Eintrag deaktiviertr sein muss. Es gibt nämlich überall Sportler und Aufräumprogramme, die davon nix wissen.

    Was die Betriebsanleitung betrifft: Da steht alles drin. Aber nur 1% unserer Kunden liest auch alles. Nützt dann nichts, wenn 99% unserer Kunden beim Support anruft. Da lasse ich doch an der wichtigen Stelle eine Meldung aufpoppen die auf das deaktivieren dieser Funktion hinweist. Ist billiger als jeder Supportmitarbeiter.

    LG Roland
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    @dive26 OK.
    Ist Dein Produkt aufstellpflichtig? oder bekommt der Kunde ein Paket und fertig?
    Kannst Du bei der Installation Deiner Software diesen Schnellstart-Eintrag zurücksetzen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo Rod,

    die meisten Kunden installieren sich die Software selbst. Einige auch die Fiskaleinheit (Smartcard+Reader+Webservice).
    Andere widerum erhalten die Kassen installiert.

    Diese Fiskaleinheit benötigen aber nur unsere österreichischen Kunden, nicht aber die deutschen oder schweizer Kunden.
    Daher möchten wir diese Einstellung (die ja nicht alle betrifft) nicht über einen Kamm scheren.

    Also es betrifft nur die österreichischen Installationen mit Windows 8.1 oder höher.
    Zudem haben wir auch drei ältere Softwareprodukte die auch auf diese Treiber zugreifen müssen, die sind noch in VB6. Dort habe ich nicht alle Möglichkeiten wie in VB.NET (zumindest nicht so einfach). Daher ist das manuelle Umstellen bei Bedarf der beste gangbare Mittelweg.

    Zudem benötigt man zum schreiben in die Registry ja auch Adminrechte - das wäre schon die nächste Hürde (wieder Supportaufwand).

    LG und schöne Feiertage.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    Adminrechte
    Da muss nur neben der Exe eine weitere Exe liegen, die sich die Admin-Rechte beim Start holt.
    Öffne das app.manifest und ändere

    XML-Quellcode

    1. <requestedExecutionLevel level="asInvoker" uiAccess="false" />

    in

    XML-Quellcode

    1. <requestedExecutionLevel level="requireAdministrator" uiAccess="true" />
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Kommt dann bei aktivierter Benutzerkontensteuerung nicht die Windows Sicherheitsabfrage ?
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    Sicherheitsabfrage
    Jou. Die muss mit OK bestätigt werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das möchte ich vermeiden. Die meisten unserer Kunden sind schon damit überfordert und dann habe ich schon den nächsten Supportanruf. Je weniger ein Kunde klicken oder bestätigen muss, desto besser. :)
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at

    dive26 schrieb:

    und dann habe ich schon den nächsten Supportanruf.
    Den hast Du dann wohl mit und ohne dieser Option.
    Vielleicht ist hier eine Lösung verborgen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, wäre aber wieder etwas wo wir eingreifen müssten. Aber bei der Installation durch uns erübrigt es sich ja, weil wir eh alles so einstellen dass es passt. Wenn ein Kunde sich das selbst installiert, dann ist die Aufgabenplanung schon wieder eine "unlösbare Hürde" für den Ottonormalverbraucher. Möglichkeiten gibt es sicher viele. Aber die müssen dann auch für unser Produkt und unsere Zielkunden Sinn machen.

    Danke nochmals. Meine Aufgabe ist ja gelöst.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at