簡體   English   中英

NSIS $TEMP 具有不同的值

[英]NSIS $TEMP Has Different Value

我注意到$TEMP參數在您執行以下操作時具有不同的值:

  • 手動運行 installer.exe(雙擊)
  • 從具有管理員權限的應用程序運行。

手動運行將導致 $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM