Seite 1 von 1

[Gelöst!] Registry Wert hinzufügen statt neu setzen

Verfasst: 27 Mär 2014, 08:52
von proland
Hi Leute,

Ich bin mittlerweile verzweifelt und suche deshalb mal wieder hier Hilfe.
Wie schon im Header beschrieben geht es darum, einer Registryvariable

Code: Alles auswählen

[Registry_Patch_Variable]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]
set "Path" = REG_EXPAND_SZ:"C:\\Program Files (x86)\\CMake 2.8\\bin;"
einen Wert hinzuzufügen statt ihn komplett zu ersetzen.

Code: Alles auswählen

[6] [Mrz 27 08:47:14:229]             Variable "Path"  had value  "C:\Program Files (x86)\Business Objects\Common\3.5\bin\NOTES\;C:\Program Files (x86)\Business Objects\Common\3.5\bin\NOTES\DATA\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\MIT\Kerberos\bin;C:\Program Files\OpenAFS\Common;C:\Program Files\OpenAFS\Client\Program;C:\Program Files\Windows Imaging\;C:\Program Files (x86)\Smart Projects\IsoBuster;C:\Program Files (x86)\cvsnt;C:\Program Files (x86)\CMake 2.8\bin"
[6] [Mrz 27 08:47:14:232]             Info:    "Path"  changed to ""C:\\Program Files (x86)\\CMake 2.8\\bin;""
So das ist die Ausgabe und das Problem. Das .ins skript macht den Key auf und gibt aus was bereits drin steht. Soweit so gut... Doch dann kommt der entscheidende Part.

Code: Alles auswählen

[6] [Mrz 27 08:47:14:232]             Info:    "Path"  changed to ""C:\\Program Files (x86)\\CMake 2.8\\bin;""
Er ersetzt alles was in diesem Pfad steht. Das ist ziemlich unpraktisch :D
Habe schon alle Dokumentationen, XWiki und Forum durch gelesen aber leider ohne Erfolg... Es muss doch irgendeinen einfachen Befehl wie add oder so geben mit dem man da was einbinden kann... Immerhin holt er sich das ja bereits ab und weiß was drin steht...

Ich wende mich hiermit jetzt an euch weil ich keine Lust habe für sowas ein extra skript zu schreiben, dass mir die variable ausließt und das hinzufügt... das muss doch mit einem Befehl gehen :D

Vielen Dank und Grüße
Proland

Re: Registry Wert hinzufügen statt neu setzen

Verfasst: 27 Mär 2014, 09:07
von dkoch

Code: Alles auswählen

DefVar $CurPath$
DefVar $NewPath$
Set $CurPath$ = EnvVar(Path)
Set $NewPath$ = $CurPath$ + " Foobar"
Könnte mir so ein Konstrukt vorstellen.
Dann den Eintrag einfach durch $NewPath$ ersetzen

Edit: Mit contains noch abfangen ob der neue Wert in der Variable schon enthalten ist.

Code: Alles auswählen

if not contains($CurPath$,"Foobar")
Registry_Path_Add
endif

Re: Registry Wert hinzufügen statt neu setzen

Verfasst: 27 Mär 2014, 10:03
von proland
Danke dkoch :)
Hat mich auf den richtigen Weg geleitet.

Code: Alles auswählen

Set $Path$ = EnvVar ("Path")
....
[Registry_Patch_Variable]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]
set "Path" = "$Path$"
supp "Path"; "C:\Program Files (x86)\CMake 2.8\bin;"
So läuft es jetzt. Zwar nicht das Optimum aber deutlich besser als ein extra Skript zu schreiben ;D
Also vielen Dank nochmal :)

Grüße
Proland

Re: Registry Wert hinzufügen statt neu setzen

Verfasst: 28 Mär 2014, 00:17
von SisterOfMercy
proland hat geschrieben:

Code: Alles auswählen

Set $Path$ = EnvVar ("Path")
....
[Registry_Patch_Variable]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]
set "Path" = "$Path$"
supp "Path"; "C:\Program Files (x86)\CMake 2.8\bin;"
Uhh, if I remember correctly, you can simplify it like this:

Code: Alles auswählen

[Registry_Patch_Variable]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]
supp "Path"; "C:\Program Files (x86)\CMake 2.8\bin;"
[/quote]

To be honest I did not read that part of the manual when I was sober. :D