使用GetParameters的NSIS奇怪的行为

时间:2013-09-25 08:06:12

标签: windows installer nsis

我和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

消息框中显示""这是错误的。

为什么会这样?

3 个答案:

答案 0 :(得分:2)

来自documentation

  

/ 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