2015-03-31 94 views
0

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

+0

为什么InitPluginDir不能工作?如果问题是“什么都不允许从temp执行”,那么您仍然可以将资产复制到临时目录,因为它们不需要执行,更正吗? – AaronLS 2015-04-01 16:41:20

回答

0

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

在NSIS V3 +,你可以使用UnsafeStrCpy:

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

真正的问题是安全“解决方案”,从%TEMP%,为什么会阻止执行,但不能从其他目录真正提供坏人之后的任何保护找出这个限制吗?

0

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

尝试此操作(在文档中查找更多信息)也许它比重写$ Temp文件夹等更安全。