2015-03-31 93 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文件夾等更安全。