デフォルトの $INSTDIR 変数がインストーラーに渡された /D パラメーターを介して変更されたことを確認するためのフラグまたはその他のオプションが NSIS にありますか?
私はそれをやろうとしました:
1. setup.exe /D=C:\Temp
2. ${GetParameters} $R0
3. And see that $R0 is empty
何かアドバイス?
デフォルトの $INSTDIR 変数がインストーラーに渡された /D パラメーターを介して変更されたことを確認するためのフラグまたはその他のオプションが NSIS にありますか?
私はそれをやろうとしました:
1. setup.exe /D=C:\Temp
2. ${GetParameters} $R0
3. And see that $R0 is empty
何かアドバイス?
.onInitが実行される前に、$InstDirはによって設定されInstallDir、によって定義された値がInstallDirRegKey存在する場合は、をオーバーライドしますInstallDir。最後に、ユーザーが/ Dを使用した場合、$InstDirそのパラメーターに設定されます。どのように設定されたかを実際に知る必要がないため、これはほとんどのインストーラーにとって問題ありません$InstDir。
を使用RequestExecutionLevel highestしていて、インストーラーが昇格ステータスに応じて1人のユーザーまたはすべてのユーザーのインストールをサポートしている場合、これは問題ありません。これを回避する唯一の方法は、使用しないことです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を探すこともできます...