3

NSIS 中是否有任何标志或其他选项可以查看默认 $INSTDIR 变量是通过传递给安装程序的 /D 参数更改的?

我试图这样做:

1. setup.exe /D=C:\Temp
2. ${GetParameters} $R0
3. And see that $R0 is empty

有什么建议吗?

4

1 回答 1

1

.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 ...

于 2013-01-11T07:14:45.243 回答