Problem mit relativer Adressierung in der Registry

Registriert
Dez. 2010
Beiträge
4.476
Hallo @ all,

ich habe folgendes Problem: Wenn ich ich in der Registry (Shell\Command-Pfad) die relative Adressierung %ProgramFiles%\... benütze, um das Kontextmenü eines Objekts manuell zu erweitern, bekomme ich folgende Fehlermeldung:

fw4ljep5.jpg


Verwende ich dagegen die direkte Adressierung C:\Program Files\... funktioniert alles ganz normal. Auch die Verwendung von %ProgramFiles% in einer Batch ist problemlos. Hat jemand eine Idee woran das liegen könnte? Hab das Problem mit Win7 egal ob x86 oder x64. Es wird ein Admin-Account genutzt, Benutzerkontensteuerung ist selbstverständlich ausgeschaltet.

Hier ein konkretes Beispiel:

"C:\Program Files\BW-Tools\DesktopIni\Make-Ini.cmd" "%1" ICOtoDir funktioniert,

"%ProgramFiles%\BW-Tools\DesktopIni\Make-Ini.cmd" "%1" ICOtoDir funktioniert nicht,



Mit digitalen Grüßen

:cool_alt: Black Widowmaker :cool_alt:
 
kann gelöscht werden, war falsch
 
Zuletzt bearbeitet:
"Benutzerkontensteuerung ist selbstverständlich ausgeschaltet."

Selbstverständlich ? - Ich finde die ganz gut. Man sollte halt das Abblenden unterbinden.

Dein Problem hat mit der Umleitung der Pfade zu tun. Mehr weiss ich aber auch nicht.
Ergänzung ()

Virtualisierung des Programm-Ordners ?
 
Das Problem hat nichts mit der Umleitung der Pfade bei der deutschen Version zu tun.


Er kann weder %PROGRAMFILES% verwenden, noch jegliche andere Variablen die auf nicht umgeleitet Pfade verweisen.

%WINDIR% z.B. verweist auf C:\windows per default. Das wird nicht umgeleitet im deutschen W7.

Trotzdem kann ers nicht in der Registry verwenden.

Mit der UAC hat das mal rein gar nichts zu tun.
 
Das Problem ist ein anderes...
Es gibt unterschiedliche String-Typen in der Registry, und nur REG_EXPAND_SZ löst solche Variablen wie %PROGRAMFILES% dann auf. Ich vermute bei dir ist es ein REG_SZ. Wie man einen REG_EXPAND_SZ via RegEdit macht - keine Ahnung ehrlich gesagt... könnte man aber vielleicht nachgooglen.

Das heißt "Wert einer erweiterabren Zeichenfolge"... ob und wie es geht den Default-Wert als solchen Expand-String zu machen - ka...

@easy.2ci: Manchmal ist es besser, wenn man keine Ahnung hat, einfach nichts zu sagen... (bezogen auf #2)

@nixName: Ist zwar OT aber: UAC auf nicht-höchster Stufe ist nicht wirklich effektiv und kann leicht umgangen werden...
Und mit der Umleitung hat's echt nichts zu tun, da muss ich easy.2ci ausnahmsweise hier doch mach recht geben...
 
Zuletzt bearbeitet:
Ok. War nur eine Idee. Interessantes Problem.
Ergänzung ()

1668: Das sieht doch nach einer Lösung aus.
 
Das Problem ist nur, wie man einen solchen Expand-String eben als Default-Wert reinbekommt... ich versuchs mal mit nem kleinen C#-Programm...

Edit:
Aus einem Programm raus scheint es problemlos zu gehen, hier der C#-Code
Code:
RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"blalbla", true);
key.SetValue("", "%PROGRAMFILES%", RegistryValueKind.ExpandString);
statt blabla halt den key...

Edit2:
Code:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\_TYPE_\shell\_COMMANDNAME_\Command]
@=hex(2):00,00
Mit dieser Reg-Datei lässt sich auch der Default-Wert auf so einen Expand-String ändern... wenn der mal in der Registy von dem Typ ist klappt das Bearbeiten auch mit RegEdit.
_TYPE_ und _COMMANDNAME_ halt austauschen wie benötigt...
 
Zuletzt bearbeitet:
Erstmal vielen, vielen Dank 1668mib,

das war das Problem. C beherrsche ich leider nicht, diese ganze Klammern, bei denen man sich die Finger bricht, war nie mein Ding.:D Das heißt nicht, daß ich auf den Kopf gefallen bin.

Die Lösung war ziemlich simpel. Ich habe eine neue REG_EXPAND_SZ Zeichenfolge mit Namen Test erstellt. Anschließend den command-Zweig exportiert, Reg-Datei in den Editor geladen, dort "Test" durch @ ersetzt, abgespeichert, registriert, schwups hat plötzlich alles funktioniert.

Ich hab immer gesehen, daß in anderen Registry-Zweigen Umgebungsvariablen Verwendung finden, hab aber nie auf den Typ geachtet - wieder was dazugelernt.

Das einzige Problem was ich sehe ist eher, daß man solche REG_EXPAND_SZ Typen nicht einfach im NotePad erstellen kann, hättest Du da vielleicht auch ein Tip auf Lager?


PS: Daß das Ganze nichts mit UAC u.ä. zusammenhängt war mir schon klar, ich wollte einfach mal ein paar typische "Probier mal..." Antworten aus dem Weg gehen - mit gegenteiligem Erfolg.:rolleyes:

Wenn aber einer nie in seine Registry schaut wieso wird dann solcher Unsinn verzapft wie: "Das geht nicht" oder "Die Registry ist dagegen was permanentes. ".

Die Registry ist so permanent, daß sie sich da nur alle 1/500s was ändert. Wenn man seine Maus bewegt, oder... :D

Mit digitalen Grüßen

:cool_alt: Black Widowmaker :cool_alt:
 
Also das Problem ist, dass solche Expand-Strings eben in diesem hexadezimalen ich glaube sogar Unicode-Format vorliegen.
Ich würde den Weg gehen, mit der Vorlage oben eben an den richtigen Stellen die Schlüssel auf Expand-String umzustellen und dann via RegEdit die Werte ändern und dann kannst du sie auch wieder rausexportieren...
 
Zurück
Oben