NSIS的$ TEMP值能否被超越?

时间:2015-03-31 18:50:03

标签: nsis

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

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