NSIS:编译时无法读取 Setx 环境变量集

问题描述 投票:0回答:1

对于以下脚本:

!define API_LOCAL_SETUP_LOCATION "C:\Temp\Some.exe"

Function API_CHECK
  !system 'for %a in (${API_LOCAL_SETUP_LOCATION}) do setx x1 "%~ta"'
  !if "$%x1%" == "${U+24}%x1%"
    !echo "%x1% not set"
  !else
    !echo "IS SET!"
  !endif
FunctionEnd

这个想法是在

编译时
检查“C:\Temp\Some.exe”文件的“修改日期”文件并将该值存储在x1环境变量中。

在编译 NSIS 脚本之前,如果我在命令提示符中执行

set
,则不存在
x1
环境变量(即未列出)。

如果我编译 NSIS 脚本,编译器会记录以下内容:

...
!define: "API_LOCAL_SETUP_LOCATION"="C:\Temp\Some.exe"
Function: "API_CHECK"
!system: "for %a in (C:\Temp\Some.exe) do setx x1 "%~ta""

C:\Users\User\Documents\Project\Installer>setx x1 "02/16/2024 01:10 PM" 

SUCCESS: Specified value was saved.
!system: returned 0
%x1% not set (Configuration.nsh:39)

但是,如果我打开一个新的命令提示符窗口并执行

set
命令,则
x1
环境变量存在并分配给“02/16/2024 01:10 PM”,如下所示:
x1=02/16/2024 01:10 PM


那么,为什么我在编译时无法读取

x1
环境变量?

注意:我试图避免将环境变量设置为系统变量(即

setx /m
)。

nsis
1个回答
0
投票

现有进程不会获取更改的环境变量,只有资源管理器会获取。从资源管理器启动的新进程将具有新变量。

使用

!system
+
!include
技巧在编译时将某些内容放入 NSIS 中:

!define API_LOCAL_SETUP_LOCATION "$%windir%\Explorer.exe"

!tempfile TMPINC
!system 'for %a in (${API_LOCAL_SETUP_LOCATION}) do @echo !define MYDATE "%~ta" >"${TMPINC}"'
!include "${TMPINC}"
!delfile "${TMPINC}"
!error "The date is ${MYDATE}"
© www.soinside.com 2019 - 2024. All rights reserved.