Правильный вызов WriteRegMultiStr в NSIS - PullRequest
0 голосов
/ 22 мая 2019

В версии 3.02 NSIS появилось добавление функции WriteRegMultiStr.Когда в моем скрипте вызывается функция, скрипт выдает ошибку:

Usage: WriteRegMultiStr /REGEDIT5 rootkey subkey entry_name hex_string_like_660000000000
root_key=(HKCR[32|64]|HKLM[32|64]|HKCU[32|64]|HKU|HKCC|HKDD|HKPD|SHCTX)

Сам вызов выглядит так:

WriteRegMultiStr /REGEDIT5 HKLM "System\CurrentControlSet\Services\SomeService" "DependsOnService" "service1 service2"

Поскольку документации нетоб этой конкретной функции, которая была добавлена ​​позже, намного позже того, как стали доступны WriteRegStr и WriteRegDWORD, я должен задаться вопросом - как ее использовать?

До сих пор относительно ввода значений REG_MULTI_SZ я нашел только директиву для использования реестра-NSIS -plugin.И все же функция существует, так как ее можно использовать?

Приложение:

Кодирование строки в шестнадцатеричное значение и передача ее с ot без кавычек также не дает желаемого результата.

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Как вы узнали, данные значения должны быть в том же формате, что и файлы .reg из Windows 2000 +.

Причина, по которой эта инструкция работает таким образом, заключается в том, что она фактически совпадает с WriteRegBin под капотом, и было добавлено очень мало кода для поддержки этой новой функциональности.

В будущем вы можете отказаться от ключа /REGEDIT5 и задать ему простые строки, но поддержка этого еще не добавлена.

Плагин Registry позволяет вам писать эти строки в разумной манере.

0 голосов
/ 22 мая 2019

Я действительно смог найти ответ, покопавшись в глубине интернета. Поскольку я не думаю, что на StackOverflow был дан ответ, я оставлю здесь ответ, если кто-то захочет использовать эту функцию.

Структура команды, описанная в вводном сообщении, в основном правильная, но значение должно быть точно закодировано. Моя команда выглядит так:

WriteRegMultiStr /REGEDIT5 HKLM "System\CurrentControlSet\Services\SomeService" "DependsOnService" 54,00,63,00,70,00,69,00,70,00,00,00,41,00,66,00,64

Для тех, кто собирается проверить эту строку, это

Tcpip
Afd

закодировано в шестнадцатеричном формате regedit. Именно это формат Regedit Version 5.0, а не формат REGEDIT4. Для этого можно использовать редактор преобразования, я использовал OTConvertIt.

Затем скрипт должен скомпилироваться, если вы запустите NSIS версии 3.02 или выше.

...