Как добавить многострочную строку REG_SZ в реестр из командной строки? - PullRequest
5 голосов
/ 30 сентября 2008

В рамках настройки сборки на компьютере с Windows мне нужно добавить запись в реестр, и я хотел бы сделать это из простого пакетного файла.

Запись предназначена для стороннего приложения, поэтому формат является фиксированным.

Запись принимает форму строки REG_SZ, но должна содержать символы новой строки, т.е. 0xOA символов в качестве разделителей.

Я столкнулся с несколькими проблемами.

Первая попытка использования regedit для загрузки сгенерированного файла .reg. Это потерпело неудачу, так как не похоже ни на длинные строки, ни на строки с символами новой строки. Я обнаружил, что экспорт работает нормально, импорт не удался. Я смог протестировать экспорт, так как стороннее приложение добавляет похожие записи напрямую через интерфейс win32.

Вторая попытка использовала команду REG ADD, но я все равно не могу добавить символы новой строки, все, что я пытаюсь, заканчивается добавлением буквальной строки.

Ответы [ 3 ]

2 голосов
/ 30 сентября 2008

Если вы не ограничены языком сценариев, вы можете сделать это в C # с помощью

Registry.CurrentUser.OpenSubKey(@"software\classes\something", true).SetValue("some key", "sometext\nothertext", RegistryValueKind.String);
2 голосов
/ 06 ноября 2012

Вы можете импортировать многострочные строки REG_SZ, содержащие переводы каретки (CR) и перевода строки (LF) в конце строки (EOL), в реестр с использованием файлов .reg, если вы не против перевода текста в формате UTF-16LE шестнадцатеричные закодированные данные. Чтобы импортировать REG_SZ с этим текстом:

1st Line
2nd Line

Вы можете создать файл с именем MULTILINETEXT.REG, который содержит это:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"MULTILINETEXT"=hex(1):31,00,73,00,74,00,20,00,4c,00,69,00,6e,00,65,00,0d,00,0a,00,\
32,00,6e,00,64,00,20,00,4c,00,69,00,6e,00,65,00,0d,00,0a,00,\
00,00

Чтобы кодировать ASCII в UTF-16LE, просто добавьте нулевой байт после каждого значения кода ASCII. Значения REG_SZ должны заканчиваться нулевым символом (,00,00) в нотации UTF-16LE.

Импорт изменений реестра в командный файл REG.EXE IMPORT MULTILINETEXT.REG.

В примере используется ключ Environment, потому что это удобно, а не потому, что особенно полезно добавлять такие данные в переменные среды. Можно использовать RegEdit для проверки того, что импортированные данные REG_SZ содержат символы CRLF.

2 голосов
/ 30 сентября 2008

Вы можете создать файл VBScript (.vbs) и просто вызвать его из пакетного файла, предполагая, что вы выполняете другие действия в пакете, кроме этого изменения реестра. В vbscript вы бы смотрели что-то вроде:

set WSHShell = CreateObject("WScript.Shell")  
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOMEKEY", "value", "type"

Вы сможете найти возможные значения типов с помощью Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...