RunShell() mit regedit.exe unter Windows 8.x

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
DelUser01

RunShell() mit regedit.exe unter Windows 8.x

Beitrag von DelUser01 »

Hallo

seit Windows 8 habe ich ein Problem mit RunShell() und regedit.exe und habe den (einfachen) Workaround jetzt gefunden.
Ich schreibe es hier rein fallls jemand auch über dieses Phänomen stolpern sollte:

Mit RunShell() werden Einstellungen in der Registry vorgenommen ( HKEY_CURRENT_USER )
Z.B. mit diesem Befehl:

Code: Alles auswählen

RunShell( NIL , "c:\windows\regedit.exe /s c:\setup\einstellungen.reg" )
Unter XP + Win 7 kein Problem, unter Windows 8.x kommt es zum Programmabsturz und dem Fehlercode:
Der angeforderte Vorgang erfordert erhöhte Rechte...
Auch wenn ich Administrator-Rechte habe.

Der Workaround:
Den Regedit-Befehl schreibe ich jetzt in eine Batch-Datei und führe diese dann mit RunShell() aus.
Das geht dann ohne Fehlermeldung...

Gruß
Roland
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Re: RunShell() mit regedit.exe unter Windows 8.x

Beitrag von andreas »

Hallo Roland,

bei so einem Aufruf kann passieren, dass du die Fehlermeldung von der Batch-Datei nicht mitbekommst. Hier musst du es vernünftig testen und die Batch erstmals sichtbar mit "Pause" am Ende ausführen, um es kontrollieren zu können, ob deine Batch-Befehle wirklich ausgeführt wurden.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: RunShell() mit regedit.exe unter Windows 8.x

Beitrag von Tom »

Das ist kein sehr vernünftiger Weg. In CURRENT_USER kann man auch ohne Adminrechte direkt aus einem Programm heraus lesen und schreiben. Dafür gibt's Funktionen (API-Calls, dürften hier im Forum dokumentiert sein.)

RunShell() ist nie ein wirklich verlässlicher Partner.
Herzlich,
Tom
DelUser01

Re: RunShell() mit regedit.exe unter Windows 8.x

Beitrag von DelUser01 »

Hallo Andreas,

Du hast prinzipiell Recht - dass Fehler die beim Ausführen einer BAT entstehen die Xbase-Exe nicht mehr interressiert kann andere Folgen haben. Es geht aber darum, dass genau diese Änderungen des Users an der Registry eben grundsätzlich vom Betriebssystem zugelassen werden (HKEY_CURRENT_USER). Aber eben nicht aus RunShell() heraus. Natürlich verlasse ich mich an dieser Stelle blind darauf dass das Betriebssystem das tut was ich möchte.
Wenn nicht hätte ich sofort eine Rückmeldung von den Usern die das nachfolgende Programm nicht mehr ordnungsgemäß starten können.

Gruß
Roland
DelUser01

Re: RunShell() mit regedit.exe unter Windows 8.x

Beitrag von DelUser01 »

Hallo Tom,

möglicher Weise hast Du Recht, aber bisher habe ich außer RunShell() noch nie für irgendeinen "Fremdstart" eines Programms etwas anderes verwendet (einmal ist immer das erste Mal). Die Funktionen laufen - zumindest bei mir - schon seeeehr lange so. Erst mit Win 8.x und RegEdit.EXE gibt es Ärger.

Gruß
Roland
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: RunShell() mit regedit.exe unter Windows 8.x

Beitrag von brandelh »

was Tom meint ist, dass es hier und in der Hilfe Beispielcode gibt um mit API Funktionen Werte zu lesen und zu setzen.
Wenn man die Rechte für REGEDIT hat, dann reichen die auch für API Funktionen.
Gruß
Hubert
DelUser01

Re: RunShell() mit regedit.exe unter Windows 8.x

Beitrag von DelUser01 »

Hallo Hubert

jetzt habe ich verstanden was Tom gemeint hat. Bei mir ist eben der Nachsatz stärker hängen geblieben:
Tom hat geschrieben:RunShell() ist nie ein wirklich verlässlicher Partner.
Guß
Roland
Antworten