6

Я пытаюсь написать взлом реестра, который упростит некоторые из моих задач по настройке, когда я создаю новую виртуальную машину или ремонтирую свой ноутбук. Одна вещь, которую я делаю, это переключение на портативные версии (синхронизированные в Dropbox) множества моих любимых приложений, включая Notepad++.

Я хочу создать запись в реестре, чтобы позволить мне иметь опцию Open with Notepad++ в моем меню правой кнопки мыши, и это единственное, чего мне не хватает в переносной версии. Я получаю ошибку, хотя:

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

Вот мой файл .reg :

[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"

Иконка работает отлично. Я могу получить запись выше, чтобы работать нормально, если я жестко закодировал C:\Users\myusername , но я собираюсь для переносимости здесь.

Я почти уверен, что проблема в том, чтобы найти правильную escape-последовательность для символов % , но трудно сказать.

Предложения?

РЕДАКТИРОВАТЬ: я пошел с опцией команды add reg , и после небольшого проб и ошибок, вот команда, которая работала:

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

После выполнения команды я также экспортировал результаты в виде файла .reg . Побеждает все вокруг.

1 ответ1

8

Чтобы использовать (развернуть) переменные среды в реестре, значение должно иметь тип REG_EXPAND_SZ.

Исходя из этого вопроса, было бы проще добавить такого рода значение с помощью команды reg а не файла .reg .,

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

Смотрите reg add /? для получения дополнительной информации об этом синтаксисе.

Вы также можете закодировать данные в шестнадцатеричном виде. Там же несколько примеров , что здесь:

Данные REG_EXPAND_SZ должны быть представлены как то, что MS называет двоичным типом данных (подтип "2"), поэтому значение должно быть отформатировано в виде шестнадцатеричного формата, разделенного запятыми, двух токенов на байт (дополненных нулями) с завершающим символом конечно, нулевой байт (и дальнейшие объяснения явно выходят за рамки этой статьи, и автор не будет нести ответственность за чье-либо неправомерное использование неполной информации, представленной до сих пор). Таким образом, строка выше не будет работать, но указывает на конечный результат, которого я хотел достичь. Как настоящий рабочий.Запись REG-файла в приведенном выше примере должна выглядеть так:

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

становится

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .