我和NSIS有一个奇怪的错误:
!include "MUI2.nsh"
!include "FileFunc.nsh" # To use GetParameters
Name nsDialogs
OutFile nsDialogs.exe
Function .onInit
${GetParameters} $R0
MessageBox MB_OK "$R0"
FunctionEnd
!insertmacro MUI_PAGE_WELCOME
Section
DetailPrint "hello world"
SectionEnd
如果我使用此命令行
nsDialogs.exe /d=hello
消息框显示:" / d = hello"正如所料,但如果我使用
nsDialogs.exe /D=hello
消息框中显示""这是错误的。
为什么会这样?
答案 0 :(得分:2)
/ D设置默认安装目录($ INSTDIR),覆盖 InstallDir和InstallDirRegKey。 必须是最后使用的参数 命令行,不得包含任何引号,即使路径 包含空格。仅支持绝对路径。
这意味着您不能将{D与${GetParameters}
一起使用(/ S和/ NCRC也是NSIS使用的开关)。 NSIS设计使用之后的所有内容 / D = $instdir
。
检测/ D的唯一方法是不在脚本中使用InstallDir[RegKey]
并检查$instdir
中是否.onInit
!=“”
答案 1 :(得分:0)
/D
是命令行参数,可以直接从安装程序命令行调用定义安装目录。
有关详细信息,请参阅Installer usage / Common Options章节。
答案 2 :(得分:0)
我不确定,但我认为NSIS默认剥离其内置参数。在这种情况下,你可以尝试这样的事情:
!define myInstDir "$PROGRAMFILES\myApp"
Function .onInit
${GetParameters} $R0
StrCpy $R0 ${myInstDir} +2
MessageBox MB_OK "$$INSTDIR was changed on runtime"
FunctionEnd