这是我的简单代码:
!include "EnvVarUpdate.nsh"
Outfile "text.exe"
Section
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\something"
SectionEnd
我理解“A”参数意味着这应该APPEND系统路径的最后一个参数。然而,测试这表明它覆盖了我的Path变量。进一步的测试显示这是因为Path太长(根据教程,> 1024个字符)。
是否有一种“安全”的方式可以追加到Path呢?我正在寻找一个函数,如果Path足够短,它将附加,否则什么也不做,并报告错误,这种类似的东西。我想知道这样做的标准方法是否已经存在。谢谢!
答案 0 :(得分:0)
你能试试吗?
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
答案 1 :(得分:0)
我们遇到了一些NSIS安装程序路径修改的问题,因为默认字符串管理限制为1024字节,路径修改中涉及的字符串操作将字符串截断为1024,有时制动工作站环境(尤其是在开发主机中安装了许多工具)。顺便说一句,在野外有很多现成的设置正在遭遇这个问题。
我们正在使用来自Path manipulation的AddToPath
函数的一些不同代码,但问题仍然存在。
我们目前使用的最佳解决方法是使用提供大字符串支持(8kB而不是1 kB)的NSIS特殊版本。该版本可在NSIS wiki的special builds page中找到。