Programm schreibt beim Beenden sehr viele Registry Einträge

GlockMane88

Lt. Commander
Registriert
Aug. 2008
Beiträge
1.335
Hi Leute,

ich verwende eine Software die beim beenden 6183 Registry Schlüssel und in jedem Registry Schlüssel 14 Werte schreibt, also in Summe 86562 Stück..

Das Beenden des Programms dauert dann dementsprechend lange und Nutzer haben leider keine Geduld, hämmern auf das X und der Schreibprozess wird unterbrochen, was dazu führt, dass beim nächsten Programmstart dies und jenes nicht funktioniert..

Ich versuche den Entwickler davon zu überzeugen, dieses Verhalten zu ändern, aber bis dahin brauche ich einen Workaround.. Die Software führt ein Messprogramm aus und an dessen Ende kann ich ein Script hängen, dieses schießt nun die Software ab (killt den Prozess) und schreibt im Hintergrund die Einträge in die Registry (.reg File wird importiert), der Benutzer bekommt davon nichts mit.. Der nette Nebeneffekt ist, dass das Programm so im Bruchteil einer Sekunde beendet wird.. Was mir aber nicht gefällt, dass auch dieser Prozess sehr lange dauert (so bis zu zwei Minuten), wenn man Regedit geöffnet hat und wiederholt F5 drückt, kann man schön sehen, wie die Einträge geschrieben werden..

Nun meine Frage, ist es möglich diesen Prozess zu beschleunigen? Eventuell die Einträge an einer anderen Stelle aufbewahren und dann symlinks zu erstellen, anstatt das Regfile zu importieren.. Oder habt ihr noch andere Ideen?

Vielen Dank!

Edit: Am liebsten wäre es mir ja, wenn die Software dies gar nicht tun würde, aber Sie löscht den entsprechenden Schlüssel bei jedem Beenden und legt ihn dann neu an, obwohl es gar nicht nötig wäre.. Reverse Engineering und den Befehl einfach entfernen würde mir da noch spontan anfangen, aber davon habe ich weder Ahnung, noch glaube ich, dass das legal wäre..
 
Du könntest versuchen, das .reg-File durch PowerShell zu ersetzen.
Das kannst du parallellisieren, und ich würde erwarten, dass das deutlich schneller schreibt als die .reg zu importieren.
 
@till69

Könnte man nicht den ganzen Ordner (Schlüssel) an einer anderen Stelle in der Registry erstellen und dann einfach einen einzigen Symlink an der eigentlichen Stelle erstellen?

@wirelessy

Hatte ich auch schon dran gedacht, aber Problem ist, dass sich das Reg File von Zeit zu Zeit ändern wird und ich somit das PS Script neu erzeugen müsste (oder gibt es sowas wie reg2ps?

Edit:

Ist ja witzig, es gibt ein tool, das heißt sogar "reg2ps", mal ausprobieren..
 
GlockMane88 schrieb:
Was mir aber nicht gefällt, dass auch dieser Prozess sehr lange dauert (so bis zu zwei Minuten), wenn man Regedit geöffnet hat und wiederholt F5 drückt, kann man schön sehen, wie die Einträge geschrieben werden..
Regedit wird wahrscheinlich irgendeine Art von Lock oder Notify auf die Registry halten.
Die Registry Files sind letztendlich *.mdb (MS Access) Files.

Oder mal schauen ob die ganzen Keys in einer Transaktion/Commit schreiben kann, anstatt für jeden Key einen Commit.
 
LOL, habe versucht den Inhalt der Reg Datei hier zu konvertieren:

https://reg2ps.azurewebsites.net/

Kommt leider ein Serverfehler, liegt wohl am Umfang des Inhalts..
Ergänzung ()

Hat jemand eine Ahnung, wie ich einen Registry Symlink per Script (powershell, bat) erstelle?
Ergänzung ()

Symlinking wird mir wahrscheinlich nichts bringen, da ich dann in das selbe Problem laufen könnte.. Hier trotzdem der Link zum entsprechenden Tool:

https://www.codeproject.com/Articles/11973/Registry-Symbolic-Links

Wäre es möglich den Registry Schlüssel (inkl. Inhalt) zu sperren also quasi ReadOnly zu machen? Dann könnte die Anwendung dort gar nichts verpfuschen, und wenn ich die Änderung möchte, dann kann ich manuell die Berechtigungen ändern (am besten per Toggle-Script)..
 
Zuletzt bearbeitet:
@foofoobar

Nee, das sind nur Einmessdaten von unserer Messmaschine, absolut uninteressant ;)

Habe nun die Berechtigungen für den Schlüssel gelöscht, Vererbung von oben entfernt, Vererbung nach unten eingeschaltet und eine Berechtigung für "jeder" erstellt, die lesen + ändern (aber nicht löschen) beinhaltet..

Die Software kann nun die Einträge lesen, erstellen und aktualisieren (beim erneuten Einmessen), aber beim Beenden nicht mehr löschen.. Dadurch beendet die Software jetzt in unter einer Sekunde, vergisst keine Daten mehr und die Funktionalität ist weiterhin gegeben.. Also Workaround geglückt, mal sehen ob sich der Software-Entwickler meiner Kritik trotzdem annimmt..
Ergänzung ()

wirelessy schrieb:
Registry kann keine Symlinks.
https://www.codeproject.com/Articles/11973/Registry-Symbolic-Links

Ich denke schon ;)
 
Nö, Registry ist schon fein für die Config, für Windows-only, aber man würde halt nicht jedes Mal die komplette Config neu schreiben, wenn sich nichts geändert hat - sondern nur was sich ändert.
Und naja, bei so einer Masse, würde sich ein einzelnes File zu schreiben evtl doch anbieten.
 
Zuletzt bearbeitet:
Zurück
Oben