我正在使用NSIS运行我的程序安装程序,但/ D选项似乎无法正常工作(或更好地覆盖内部)。 通过命令行我触发:
installer.exe /S /D=C:\Users\Public\installDir
NSIS代码是:
InstallDir "C:\Users\Public\${VERSIONSTR}"
Function xxxx
${If} $MultiUser.InstallMode == "AllUsers"
StrCpy $INSTDIR "C:\Users\Public\Dir1"
${EndIf}
IfSilent 0 +20
StrCpy $INSTDIR "C:\Userdata\Dir2"
FunctionEnd
使用过的安装文件夹是“C:\ Users \ Public \ Dir2”。即使我对IfSilent块进行注释,installtion文件夹也将是“C:\ Users \ Public \ Dir1”,但绝不会通过命令行传递。 我的剧本有什么问题?
答案 0 :(得分:2)
!include LogicLib.nsh
;InstallDir ; Do not use InstallDir at all so we can detect empty $InstDir
!define DEFDIR_MACHINE "$programfiles\foo"
!define DEFDIR_PERUSER "$localappdata\bar"
Function .onInit
${If} $InstDir == "" ; /D not used
${If} $MultiUser.InstallMode == "AllUsers"
StrCpy $InstDir "${DEFDIR_MACHINE}"
${Else}
StrCpy $InstDir "${DEFDIR_PERUSER}"
${EndIf}
${If} ${Silent}
StrCpy $InstDir "c:\CrazySilentOverride"
${EndIf}
${EndIf}
FunctionEnd