und*_*ndo 2 windows installation nsis runonce temp
我注意到当您执行以下操作时$TEMP参数具有不同的值:
手动运行将导致 $TEMP = C:/Users/username/AppData/Local/Temp
从具有管理员权限的应用程序运行 = C:/Windows/Temp
健康)状况:
我有一个安装程序,需要重新启动系统才能完成该过程。
为此,我在 $TEMP 中创建了安装程序的副本,并将路径放入RunOnce
问题:
该功能工作正常(重启后,程序更新为新版本)。
但是,在安装过程结束时,我无法删除安装程序的副本,因为通过RunOnce运行安装程序时$TEMP = C:/Users/username/AppData/Local/Temp。
事实上,安装程序的副本位于C:/Windows/Temp
问题:
是否可以强制 $TEMP 始终 = C:/Windows/Temp?
有没有更好的解决方案来解决系统重新启动安装的情况?
NSIS 获取它的$Temp变量是这样的:
首先它会尝试GetTempPath。该函数尝试(按顺序):%TMP%、%TEMP%、%USERPROFILE%和%WINDIR%,并返回第一个存在的变量。
然后,NSIS 尝试写入此目录,如果失败,NSIS 将使用%WINDIR%\Temp.
管理员与非管理员或 UAC 提升并不是您所看到的真正原因。听起来更像是配置或防病毒问题。
$Temp如果你确实想在 NSIS 3 中,你可以强制进入特定目录:
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
Run Code Online (Sandbox Code Playgroud)
我实际上并不理解你的问题,因为 RunOnce 条目可以通过使用$ExePath.
| 归档时间: |
|
| 查看次数: |
1390 次 |
| 最近记录: |