[英]NSIS $TEMP Has Different Value
我注意到$TEMP參數在您執行以下操作時具有不同的值:
手動運行將導致 $TEMP = C:/Users/username/AppData/Local/Temp
從具有管理員權限的應用程序運行 = C:/Windows/Temp
健康)狀況:
我有一個安裝程序,需要重新啟動系統才能完成該過程。
為了實現這一點,我在 $TEMP 中制作了一份安裝程序的副本,並將路徑放在RunOnce 中
問題:
該功能工作正常(重啟后,程序更新為新版本)。
但是,在安裝過程結束時,我無法刪除安裝程序的副本,因為 $TEMP = C:/Users/username/AppData/Local/Temp通過RunOnce運行安裝程序時。
實際上,安裝程序的副本位於C:/Windows/Temp
題:
是否可以強制 $TEMP 始終為 = C:/Windows/Temp ?
有沒有更好的解決方案來解決系統重啟安裝的情況?
NSIS 像這樣獲取它的$Temp
變量:
首先它嘗試GetTempPath
。 該函數嘗試(按順序): %TMP%
、 %TEMP%
、 %USERPROFILE%
和%WINDIR%
,並返回存在的第一個變量。
NSIS 然后嘗試寫入此目錄,如果失敗,NSIS 使用%WINDIR%\\Temp
。
管理員與非管理員或 UAC 提升並不是您所看到的真正原因。 聽起來更像是配置或防病毒問題。
如果你真的想在 NSIS 3 中,你可以強制$Temp
到一個特定的目錄:
Function .onInit
UnsafeStrCpy $Temp "$Windir\Temp"
CreateDirectory $Temp
/*
#--# Uncomment to apply the same %TEMP% to child processes #--#
System::Call 'KERNEL32::SetEnvironmentVariable(t"TEMP",t"$Temp")'
System::Call 'KERNEL32::SetEnvironmentVariable(t"TMP",t"$Temp")'
*/
FunctionEnd
我實際上並不理解你的問題,因為 RunOnce 條目可以通過使用$ExePath
來判斷它的路徑是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.