Fehler beim Importieren erkennen

  • Hallo,

    ich benutze Windows 10 Pro 64-Bit und AutoIt 3.3.14.5.

    Wenn ich eine .reg-Datei mit:

    Run(@WindowsDir & "\explorer.exe Test.reg)

    in die Registry importieren will, erscheint ja erst ein Fenster, mit der Frage, ob man diese Datei importieren will.

    Dieses Fenster bestätige ich mit "Ja" und als nächstes kommt da ein Fenster, mit eine Erfolgsmeldung oder einer Fehlermeldung.

    Jetzt kommt meine Frage.

    Wie kann man erkennen, ob da eine Fehlermeldung oder eine Erfolgsmeldung angezeigt wird?

    Das Fenster-Info ist da anscheinend keine Hilfe, da da kein Fenstertext angezeigt wird.

    Auch mit dem Style oder dem ExStyle geht nichts, da das Fenster mit der Erfolgsmeldung und das Fenster mit der Fehlermeldung die gleichen Daten haben.

    Daher habe ich es auch schon mit "PixelSearch" versucht um das rote Symbol zu erkennen, aber auch das geht nicht.

    Das Fenster scheint nur ein leeres Fenster zu sein, in das erst später der entsprechende Text eingeblendet wird.

    Aber irgendwoher muss Windows doch wissen, was es in diesem leeren Fenster anzeigen soll.

    Zudem erklingt ja auch der entsprechende Sound dazu und dazu muss es ja auch ein entsprechendes Ereignis geben.

    Eventuell kennt einer ein Möglichkeit dieses Fenster auszuwerten (oder die dafür nötige Windows-Message).

    MfG:

    BigRox

  • Hier mal meine Lösung aus meinem Archiv. Ich füge die .reg Datei über die cmd hinzu.

    Die Fehlerprüfung ist rudimentär, hatte mir aber bisher genügt. Ich prüfe nur ob der 1. Schlüssel der in der .reg Datei aufgeführt ist auch in der Registry angekommen ist.

    Sauberer, und einfacher, wäre wohl ein StdoutRead der Kommandozeile. Das habe ich aber nicht hinbekommen.

    Bedenke das du für viele Bereiche in der Registry admin Rechte brauchst.

  • Gofel : Naja die Prüfung ist auch nicht so gut, da du nur prüfst ob der Key existiert und nicht welchen Wert er hat.

    Wenn du nun keys hast, die sich "nur" ändern, wird die Prüfung auf Erfolg laufen obwohl der neue Wert nicht übernommen wurde.

    Auch ist dein Wert, den du aus Runwait zurück bekommst nicht die PID (das wäre bei Run der Fall)! Dort erhälst du den Rückgabewert des Programms!

    BigRox :

    Ich schreibe Registryeinträge mit Regwrite, dort wird @error auf einen Wert gesetzt, der Rückschlüsse zulässt (siehe dazu die Hilfe).

    Außerdem prüfe ich ALLE Registryeinträge auf ihre erwarteten Werte, wo ich eine Änderung vorgenommen habe.

  • Moombas

    Ich schreibe Registryeinträge mit Regwrite, dort wird @error auf einen Wert gesetzt, der Rückschlüsse zulässt (siehe dazu die Hilfe).

    Außerdem prüfe ich ALLE Registryeinträge auf ihre erwarteten Werte, wo ich eine Änderung vorgenommen habe.

    Da ich z.B. die Einstellungen von MS-Office 2013 in die Registry importieren will und diese Datei über 100 Werte usw. umfasst,

    würde das mit dem jeden Wert testen, wohl ein ganz schön großer Aufwand werden.

    Das mit dem Auswerten der Fehlermeldung ist dann wohl schon besser, weil dann übernimmt Windows die ganze Testerei für mich.

    MfG:

    BigRox

  • BigRox : Stimme ich dir zu. aber du hast selber einen Weg aufgezeigt wie es geht.

    Aus der *.reg Datei alles notwendige auslesen (Schlüssel und Wert), schreiben (regwrite (oder als ganze Datei halt vorher)) und gegenprüfen.

    Einmal editiert, zuletzt von Moombas (22. März 2021 um 13:15)

  • Moombas

    aber du hast selber einen Weg aufgezeigt wie es geht.

    Ich vermute mal, du meinst das mit dem Auswerten der Fehlermeldung.

    Nur wie geht das?

    Das mit "WM_NOTIFY" usw. habe ich leider bisher nicht so recht verstanden.

    Wo bekomme ich z.B. die Parameter dafür her und was bekomme ich da zum auswerten zurück usw.

    Gibt es dafür eventuell ein Tutorial in deutsch?

    Mfg:

    BigRox

    Einmal editiert, zuletzt von BigRox (23. März 2021 um 10:24)

  • BigRox Nein, muss mich entschuldigen :) Ich meinte das von Gofel aufgezeigte:

    AutoIt
    Local $sTestKey = StringMid($sRead, StringInStr($sRead, "[") + 1, StringInStr($sRead, "]") - StringInStr($sRead, "[") - 1)

    Das kann man für den Schlüssel und den Wert machen und somit zwar eine *.reg Datei haben, sie aber wie oben von mir beschrieben einlesen/auswerten.

  • Moombas

    so etwas ähnliches, habe ich mir auch schon mal überlegt.

    Eine .reg-Datei mit einer Schleife durchackern, die einzelnen Schlüssel usw. so suchen lassen, die gefundenen Sachen in die entsprechenden AutoIt-Befehle umwandeln und dann ausführen lassen.

    Anschließend das ganze wieder einlesen und vergleichen und wenn etwas ungleich ist >> Fehlermeldung.

    Dann versuche ich mal mir das "zusammenzubasteln".

    MfG:

    BigRox

  • Ein 'reg import' wie in meinem Beispiel beinhaltet bereits eine Fehlerprüfung seitens Microsoft:

    https://docs.microsoft.com/de-de/windows-…ands/reg-import

    würde die Kommandozeile etwas brauchbares in StdoutRead schreiben wäre das ein vernünftige Lösung.

    Leider stehe ich mit StdoutRead auf Kriegsfuß :)

    Das Auslesen einer *.reg Datei und umwandeln in Autoit ist möglich, aber schwieriger als zunächst gedacht. REG_BINARY Werte z.B. müssen umgewandelt werden damit

    sie in der Registry richtig ankommen. Hatte ich in der Vergangeheit aber auch schonmal gemacht. Finde dazu aber leider nichts in meinem Archiv.

  • Wenn Du schon ein externes Programm verwendest warum wertest Du nicht den Errorlevel aus?

    Für das CMD:

    reg import mein.reg

    echo %errorlevel%

    oder wenn Du es in einem Zug haben möchtest:

    reg import mein.reg && echo %errorlevel% >meins.log

    lg

    Racer

  • Danke für den Tipp, das reicht mir für den Hausgebrauch völlig:

    Einmal editiert, zuletzt von Gofel (26. März 2021 um 02:57)