我想在我的应用程序的系统变量路径中设置环境变量。如何使用 nsis 进行设置?
例如:C:\Program Files\Sample\bin
,我想在系统变量中设置这个路径。
我想在我的应用程序的系统变量路径中设置环境变量。如何使用 nsis 进行设置?
例如:C:\Program Files\Sample\bin
,我想在系统变量中设置这个路径。
有几种方法可以做到这一点。我假设您想永久设置它,而不仅仅是为安装程序
如另一个答案所述,您可以使用 ns::Exec 或 ExecWait 运行 setx 。这样做的缺点是 setx 仅随 Windows Vista 或更高版本提供。Windows XP 用户不会设置他们的路径。SET 命令仅用于进程,不会永久设置路径。
您可以使用 ReadEnvString 读取当前路径,将其格式化为您想要的格式,然后使用 WriteRegExpandStr 将其输出。请参阅http://nsis.sourceforge.net/Setting_Environment_Variables。这样做的缺点是您必须自己完成路径的所有格式设置,并且您必须复制已经在 EnvVarUpdate 函数中为您完成的工作 - 如下所述......
我使用的方法是 EnvVarUpdate 函数。你可以在这里找到这个函数的代码;http://nsis.sourceforge.net/Environmental_Variables:_append,_prepend,_and_remove_entries
将此功能与您的示例路径一起使用;
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "C:\Program Files\Sample\bin" ; appends to the system path
${EnvVarUpdate} $0 "PATH" "A" "HKCU" "C:\Program Files\Sample\bin" ; appends to the user path
这允许您选择附加或前置,它允许您删除您在卸载程序中添加的内容。
请注意,具有默认编译二进制文件的 NSIS 的最大字符串长度为 1024 个字符。如果路径比这长,如果您不应用上面链接中列出的补丁,您可能会损坏它。首选的解决方案是下载将字符串长度设置为 8192 个字符的 makensis 二进制文件,或者自己编译源并设置更长的字符串长度。你可以在这里找到更多信息;http://nsis.sourceforge.net/Special_Builds
然而,第二种解决方案需要包含一个 .nsh 文件,并且不清楚如何完全重置变量。它具有删除、附加或添加到以分号分隔的条目列表(例如 PATH 变量)的功能。