NSIS的$TEMP价值会被过度利用吗?

NSIS的$TEMP价值会被过度利用吗?,nsis,Nsis,我有一个客户正在使用主机入侵保护,并已将每个用户的临时文件夹设置为不允许执行C:\users\\AppData\Local\temp。NSIS将所有插件DLL及其自己的DLL提取到%TEMP%以下的文件夹中。问题是不允许从temp执行任何操作,因此整个安装失败。我需要知道的是如何告诉NSIS使用不同的文件夹。我能找到的唯一解决方法是将注册表项HCU\Environment下的TEMP和TMP值从%USERPROFILE%\AppData\Local\TEMP编辑为类似C:\NSISTEMP的值。

我有一个客户正在使用主机入侵保护,并已将每个用户的临时文件夹设置为不允许执行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

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

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

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

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

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


尝试在文档中查找更多信息可能比覆盖$Temp文件夹等更安全。

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