デフォルトの $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を探すこともできます...