【问题标题】:Can NSIS's $TEMP value be over-ridden?NSIS 的 $TEMP 值可以被覆盖吗?
【发布时间】:2015-04-09 15:46:32
【问题描述】:

我有一个使用 Host Intrusion Protection 的客户,并且已将每个用户的临时文件夹设置为不允许执行 (C:\users\\AppData\Local\Temp)。 NSIS 将所有插件 dll 和它自己的 dll 提取到 %TEMP% 以下的文件夹中。问题是不允许从 temp 执行,因此整个安装失败。我需要知道的是如何告诉 NSIS 使用不同的文件夹。我能找到的唯一解决方法是将注册表项 HCU\Environment 下的 TEMP 和 TMP 值从“%USERPROFILE%\AppData\Local\Temp”编辑为 C:\NSISTEM。但是,即使这可以更改注册表然后将其放回去也不是一个真正的选择。我也不能只重定向 InitPluginDir,因为它只会影响插件,而不影响 NSIS 提取的其余部分(图标 xml 文件等......)。有什么想法吗?s

【问题讨论】:

  • 为什么 InitPluginDir 不起作用?如果问题是“不允许从 temp 执行任何内容”,那么您仍然可以将资产复制到 temp 目录,因为它们不需要执行,对吗?

标签: nsis


【解决方案1】:

您可以在运行安装程序之前在终端/控制台窗口中设置%TMP%,无需编辑注册表。

在 NSIS v3+ 中,您可以使用 UnsafeStrCpy:

Function .onInit
UnsafeStrCpy $Temp "c:\foo\bar"
CreateDirectory "$Temp"
FunctionEnd

真正的问题是安全“解决方案”,为什么在坏人发现这个限制后,阻止从 %Temp% 而不是从其他目录执行真的能提供任何保护?

【讨论】:

    【解决方案2】:

    如果安装程序使用特殊的 _?=$InstDir 参数启动,则不会将其复制到 %Temp%。

    试试这个(在文档中查找更多信息)也许它比覆盖 $Temp 文件夹等更安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      相关资源
      最近更新 更多