NSIS - EnvVarUpdate перезаписывает системный путь, когда путь слишком длинный, есть ли обходной путь?

Вот мой простой код:

!include "EnvVarUpdate.nsh"

Outfile "text.exe"

Section

${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\something"

SectionEnd

Я понимаю, что аргумент "А" означает, что это ДОЛЖНО ПРИЛОЖИТЬ последний аргумент к системному пути. Тем не менее, тестирование показало, что это изменило мою переменную Path. Дальнейшие тесты показывают, что это потому, что Path был слишком длинным (>1024 символа, согласно учебнику).

Есть ли тогда "безопасный" способ присоединиться к Path? Я ищу функцию, которая будет добавляться, если путь достаточно короткий, в противном случае ничего не делать и сообщать об ошибке, что-то в этом роде. Мне интересно, существует ли уже стандартный метод для этого. Спасибо!

2 ответа

Решение

Мы столкнулись с некоторыми проблемами, связанными с модификациями пути из установщиков NSIS, из-за того, что управление строками по умолчанию ограничено 1024 байтами, а манипуляции со строками, связанные с модификацией пути, обрезают строки до 1024 и иногда приводят к торможению среды рабочей станции (особенно в хостах разработки). где установлено много инструментов). Кстати, в дикой природе существует множество встроенных настроек nsis, которые страдают от этой проблемы.

Мы используем другой код, полученный из AddToPath Функция из манипуляции пути, но проблема остается аналогичной.

Лучший обходной путь, который мы используем до сих пор, - это использование специальной сборки NSIS, которая обеспечивает поддержку больших строк (8 КБ вместо 1 КБ). Эта сборка доступна на специальной странице сборок вики NSIS.

Вы можете попробовать это?

Section 

ReadEnvStr $0 PATH
StrCpy $0 "$0;C:\Program Files\something"
StrLen $1 $0

${if} $1 < 1024
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\something"
${else}
messagebox mb_ok "error writing environment variable"
${endIf}

SectionEnd
Другие вопросы по тегам