NSIS - 当路径太长时,EnvVarUpdate会覆盖系统路径,是否有解决方法?

时间:2014-02-20 02:49:22

标签: windows path nsis

这是我的简单代码:

!include "EnvVarUpdate.nsh"

Outfile "text.exe"

Section

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

SectionEnd

我理解“A”参数意味着这应该APPEND系统路径的最后一个参数。然而,测试这表明它覆盖了我的Path变量。进一步的测试显示这是因为Path太长(根据教程,> 1024个字符)。

是否有一种“安全”的方式可以追加到Path呢?我正在寻找一个函数,如果Path足够短,它将附加,否则什么也不做,并报告错误,这种类似的东西。我想知道这样做的标准方法是否已经存在。谢谢!

2 个答案:

答案 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 manipulationAddToPath函数的一些不同代码,但问题仍然存在。

我们目前使用的最佳解决方法是使用提供大字符串支持(8kB而不是1 kB)的NSIS特殊版本。该版本可在NSIS wiki的special builds page中找到。