我有一位客户使用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文件等......)。任何想法?
答案 0 :(得分:0)
您可以在运行安装程序之前在终端/控制台窗口中设置%TMP%
,无需编辑注册表。
在NSIS v3 +中,您可以使用UnsafeStrCpy:
Function .onInit
UnsafeStrCpy $Temp "c:\foo\bar"
CreateDirectory "$Temp"
FunctionEnd
真正的问题是安全性“解决方案”,为什么在坏人发现这个限制之后,阻止从%Temp%执行而不是从其他目录执行是否真的提供了任何保护?
答案 1 :(得分:0)
如果使用特殊的 _?= $ InstDir 参数启动安装程序,则不会将其复制到%Temp%。
试试这个(在文档中查找更多信息)也许它比覆盖$ Temp文件夹等更安全。