関連するソフトウェアが既にインストールされている場合、修復/アンインストール プログラムとしても機能するインストーラーを作成する必要があります。
プログラムが存在するかどうかを確認し、それに応じてボタンを表示するカスタム ページを作成することができました (レジストリ キーの作成はテスト目的のみであり、インストール プロセスに含める必要があります)。
たとえば、プログラムがインストールされていない場合は、[インストール] ボタンが表示されます。
これを行うコードは次のとおりです。
Page Custom MyCustomPage
var button
var buttonRepair
var buttonUninstall
var dialog
Function MyCustomPage
ReadRegStr $R0 HKLM ${P_DIR_REGKEY} "Version"
${If} ${Errors}
Goto NotInstalled
${Else}
Goto Installed
${EndIf}
NotInstalled:
nsDialogs::Create 1018
;Pop $dialog
${NSD_CreateButton} 25% 25% 50% 50% "Install"
Pop $button
EnableWindow $button 1 # start out disabled
WriteRegStr HKLM ${P_DIR_REGKEY} "Version" ${P_VERSION}
WriteRegStr HKLM ${P_DIR_REGKEY} "" "$INSTDIR\asd.exe"
nsDialogs::Show
${NSD_OnClick} $button ManageInstall
Goto MyEnd
Installed:
nsDialogs::Create 1018
Pop $0
${NSD_CreateButton} 12% 12% 25% 25% "Repair"
Pop $buttonRepair
${NSD_CreateButton} 37% 12% 25% 25% "Uninstall"
Pop $buttonUninstall
EnableWindow $button 1 # start out disabled
EnableWindow $button2 1
${NSD_OnClick} $buttonRepair ManageRepair
${NSD_OnClick} $buttonUninstall ManageUninstall
nsDialogs::Show
Goto MyEnd
MyEnd:
Quit
FunctionEnd
Function ManageInstall
MessageBox MB_OK "Installation"
FunctionEnd
Function ManageRepair
MessageBox MB_OK "Repair"
FunctionEnd
Function ManageUninstall
MessageBox MB_OK "Uninstallation"
FunctionEnd
問題は、それがすべて関数によって管理されており、それらの中で新しいページ マクロを宣言できないことです。そのため、セクションを介して適切なインストールを続行できません。
通常のインストールのようにユーザーフレンドリーなページを作成できるようにするには、インストーラーが実行するさまざまなアクションをどのように管理すればよいですか?
少し面倒で複雑に聞こえるので、すべてのアクションにカスタム ページを使用する必要がありますか?