1

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

消息框显示“”,这是错误的。

为什么会这样?

4

3 回答 3

2

文档中:

/D 设置默认安装目录 ($INSTDIR),覆盖 InstallDir 和 InstallDirRegKey。它必须是命令行中使用的最后一个参数,并且不能包含任何引号,即使路径包含空格也是如此。仅支持绝对路径。

这意味着您不能将 /D 与${GetParameters}(/S 和 /NCRC 也是 NSIS 使用的开关)一起使用。NSIS 按设计使用/D= as之后的所有内容$instdir

检测 /D 的唯一方法是不在InstallDir[RegKey]您的脚本中使用并检查是否$instdir是 != "" in.onInit

于 2013-09-26T02:42:13.973 回答
0

/D是命令行参数,可以直接从安装程序命令行调用定义安装目录。

有关详细信息,请参阅安装程序用法/常用选项一章。

于 2013-09-25T09:03:05.170 回答
0

我不确定,但我假设 NSIS 默认会去掉它的内置参数。在这种情况下,你可以尝试这样的事情:

!define myInstDir "$PROGRAMFILES\myApp"

Function .onInit
    ${GetParameters} $R0
    StrCpy $R0 ${myInstDir} +2
    MessageBox MB_OK "$$INSTDIR was changed on runtime"
FunctionEnd
于 2013-09-25T11:15:11.337 回答