NSIS 中是否有任何标志或其他选项可以查看默认 $INSTDIR 变量是通过传递给安装程序的 /D 参数更改的?
我试图这样做:
1. setup.exe /D=C:\Temp
2. ${GetParameters} $R0
3. And see that $R0 is empty
有什么建议吗?
NSIS 中是否有任何标志或其他选项可以查看默认 $INSTDIR 变量是通过传递给安装程序的 /D 参数更改的?
我试图这样做:
1. setup.exe /D=C:\Temp
2. ${GetParameters} $R0
3. And see that $R0 is empty
有什么建议吗?
.onInit
执行之前,$InstDir
由 设置InstallDir
,然后如果由 定义的值InstallDirRegKey
存在,它将覆盖InstallDir
。最后,如果用户使用了/D,$InstDir
则设置为那个参数。这对大多数安装人员来说是可以的,因为您实际上并不需要知道如何$InstDir
设置。
如果您正在使用RequestExecutionLevel highest
并且您的安装程序支持根据海拔状态为单个用户或所有用户安装,那么这是不行的。解决这个问题的唯一方法是不使用InstallDir*
; DO NOT USE: InstallDir
; DO NOT USE: InstallDirRegKey
!include LogicLib.nsh
Function .onInit
${If} $InstDir != ""
; /D was used
${Else}
; Set some default
StrCpy $InstDir "$ProgramFiles\foo\bar"
${EndIf}
FunctionEnd
或者,您可以使用System::Call kernel32::GetCommandLine()t.r0
并解析 $0 最后寻找 /D ...