似乎 NSIS 中的 $TEMP 文件夹路径与 %TEMP% windows 变量不匹配

问题描述 投票:0回答:1

我继承了一个我正在尝试更新的项目。它使用 NSIS 3.0b2(我也尝试使用 3.08 并遇到了同样的问题)。

我正在尝试将文件(有效 URL)下载到 $TEMP 变量,但是我看到“复制失败”错误。

通过打印 $TEMP 变量,我看到它是“C:\Users\JSMITH~1\AppData\Local\Temp”(注意,使用 John Smithy 作为示例用户名)

我的机器上似乎不存在这种样式的用户文件夹。 %temp% 带我到“C:\Users\jsmithy\AppData\Local\Temp”

大概这是我的 .nsh 脚本中 $TEMP 的预期文件夹。这可能最初是为 Windows 7 设计的,现在它在 Windows 10 上运行。我假设 NSIS 3.08 会修复这个问题,因为 3.0b2 是 win10 的测试版,但我看到了相同的 $temp 路径。

这是在任何地方定义的吗?修复此路径的正确方法是什么? (我看过刚刚创建一个新变量的帖子,但我更好奇 NSIS 从哪里提取“旧式”用户名,似乎不再受支持)。

“旧式”意味着 Users\JSMITH~1 与“新式”Users\jsmithy

windows nsis temp
1个回答
0
投票

NSIS 调用

GetTempPath
来解决
$temp
。以 ~1 结尾的文件名表示短名称,您必须询问 Microsoft 为什么他们返回短名称,可能是为了兼容性。

如果你真的想要你可以做的长名字

System::Call 'kernel32::GetLongPathName(t"$temp", t.r1, i${NSIS_MAX_STRLEN})'
MessageBox MB_OK $1
© www.soinside.com 2019 - 2024. All rights reserved.