Hinzufügen von %USERPROFILE% zu einem Befehl in der Windows-Registrierung

Hinzufügen von %USERPROFILE% zu einem Befehl in der Windows-Registrierung

Ich versuche, einen Registry-Hack zu schreiben, der einige meiner Setup-Aufgaben vereinfacht, wenn ich eine neue VM erstelle oder meinen Laptop neu aufbaue. Eine Sache, die ich mache, ist, auf portable Versionen (synchronisiert in Dropbox) einiger meiner Lieblings-Apps umzusteigen, darunter Notepad++.

Ich möchte einen Registrierungseintrag erstellen, der mir die Option „Mit Notepad++ öffnen“ in meinem Rechtsklickmenü ermöglicht. Das ist das einzige, was mir bei der portablen Version fehlt. Allerdings erhalte ich eine Fehlermeldung:

Windows cannot access the specified device, path or file. You may not have the 
appropriate permissions to access the item.

Hier ist meine .regDatei:

[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++]
"Icon"="%USERPROFILE%\\Dropbox\\Programs\\Setup\\Icons\\Notepad++.ico"
@=""

[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++\command]
@="%USERPROFILE%\\Dropbox\\Programs\\Notepad++\\notepad++.exe %1"

Das Symbol funktioniert einwandfrei. Ich kann den obigen Eintrag zum Laufen bringen, wenn ich ihn fest codiere C:\Users\myusername, aber hier lege ich Wert auf Portabilität.

Ich bin ziemlich sicher, dass das Problem lediglich darin besteht, die richtige Escape-Sequenz für die %Symbole zu finden, aber das ist schwer zu sagen.

Vorschläge?

BEARBEITEN: Ich habe mich für die add regBefehlsoption entschieden und nach einigem Ausprobieren ist hier der Befehl, der funktioniert hat:

reg add HKCR\*\shell\OpenWithNotepad++\command /t REG_EXPAND_SZ /ve /d ^%USERPROFILE^%"\Dropbox\Programs\Notepad++\notepad++.exe %1"

.regNachdem ich den Befehl ausgeführt hatte, habe ich die Ergebnisse auch als Datei exportiert . Ein Gewinn auf ganzer Linie.

Antwort1

Um Umgebungsvariablen in der Registrierung verwenden (erweitern) zu können, muss der Wert vom Typ seinREG_EXPAND_SZ.

Bezogen aufdiese Fragewäre es am einfachsten, diesen Wert mit dem Befehl hinzuzufügen, reganstatt mit einem.regDatei..

reg add <KEY> /v <NAME> /t REG_EXPAND_SZ /d <DATA>

reg add /?Weitere Informationen zu dieser Syntax finden Sie unter .

Sie können die Daten auch als Hexadezimalwert kodieren. Hier sind einige Beispiele dafürHier:

REG_EXPAND_SZDie Daten müssen als das präsentiert werden, was MS einebinärDatentyp (Untertyp „2“), daher muss der Wert in einer Art Hexadezimalformat formatiert werden, Komma-getrennt, zwei Token pro Byte (aufgefüllt mit Nullen), natürlich mit einem abschließenden Nullbyte (weitere Erklärungen gehen offensichtlich weit über den Rahmen dieses Artikels hinaus, und der Autor kann nicht für den Missbrauch der bisher gegebenen unvollständigen Informationen verantwortlich gemacht werden). Daher funktioniert die obige Zeile nicht, zeigt aber das Endergebnis, das ich erreichen wollte. Als wirklich funktionierender .REG-Dateieintrag muss das obige Beispiel wie folgt wiedergegeben werden:

"SoMeThIng"="%WINDIR%\\system32"

wird

"SoMeThIng"=hex(2):22,25,57,49,4e,44,49,52,25,5c,5c,73,79,73,74,65,6d,33,32,22,00

Antwort2

12 Jahre später, unter Windows 11, benötigen wir immer noch Hex-Strings für REG_EXPAND_SZ in .reg-Dateien.
Das Schreiben von reg.exe-Befehlen in eine CMD-Datei ist hierfür immer noch einfacher.

Wir können auch Folgendes tun, wenn wir reg.exe über CMD verwenden:
Lassen Sie die Umgebungsvariablenin CMD erweitern, so dass sieGeben Sie die Registrierung als einfache Zeichenfolgen ein.
Die Syntax ist etwas einfacher, da Sie ^ vor % weglassen
und den gesamten String in Anführungszeichen setzen. Denken Sie daran, den Typ als REG_SZ festzulegen.

reg add HKCU\Software\Classes\*\shell\OpenWithNPP\command /t REG_SZ /ve /d "%AllUsersProfile%\apps\npp\notepad++.exe %1"

REG QUERY HKCU\Software\Classes\*\shell\OpenWithNPP\command /s

Ergebnis:

HKEY_CURRENT_USER\Software\Classes\*\shell\OpenWithNPP\command
    (Default)    REG_SZ    C:\ProgramData\apps\npp\notepad++.exe %1

Solange Sie den „bekannten Ordner“ später nicht an einen anderen Ort verschieben,
funktioniert der fest codierte Pfad weiterhin.

%AllUsersProfile% ist uralt und mit XP kompatibel.
%ProgramData% ist das Äquivalent, das heutzutage verwendet wird.
Aber ich mache das für Mac-Benutzer, die XP in einer VM haben, um eine alte App auszuführen. ;)

Der tatsächliche Pfad ist in XP anders, aber die Verwendung dieser Methode in einem cmd-Skript
fügt den richtigen Pfad für die Maschine ein, auf der es ausgeführt wird.

verwandte Informationen