Nsis 从nsExec::Exec获取输出

Nsis 从nsExec::Exec获取输出,nsis,Nsis,我正在尝试从nsExec获取标准输出。例如,这将在MessageBox中显示当前日期: nsExec::Exec 'date /t' Pop $0 MessageBox MB_OK "$0" 显然你不是这样做的。它只显示1。从nsExec::Exec获取输出的正确方法是什么:Exec只是隐藏stdout,您需要::ExecToStack 语法如下所示: nsExec::Exec '"App"' Pop $0 ; Exit code / er

我正在尝试从nsExec获取标准输出。例如,这将在MessageBox中显示当前日期:

  nsExec::Exec 'date /t'
  Pop $0
  MessageBox MB_OK "$0"

显然你不是这样做的。它只显示
1
。从
nsExec::Exec
获取输出的正确方法是什么:Exec只是隐藏stdout,您需要::ExecToStack

语法如下所示:

nsExec::Exec '"App"' 
Pop $0 ; Exit code / error

nsExec::ExecToStack '"App"' 
Pop $0 ; Exit code / error
Pop $1 ; stdout output
您得到一个错误代码,因为
time
是cmd.exe中的内置命令,而不是应用程序。您需要调用cmd.exe来执行该命令:

nsExec::ExecToStack '"$sysdir\cmd.exe" /C time /t' 
Pop $0 ; Exit code / error, should be 0
Pop $1 ; Time
如果你只想知道时间,你也可以这样做:

System::Call 'kernel32::GetLocalTime(p@r0)'
System::Call '*$0(&i2, &i2, &i2, &i2, &i2.r4, &i2.r5, &i2.r6, &i2)'
IntFmt $5 "%.2d" $5 ; 0 pad
IntFmt $6 "%.2d" $6 ; 0 pad
MessageBox mb_ok $4:$5:$6

你是真的想知道时间还是仅仅是一个例子?我真的想知道日期