0

関連するソフトウェアが既にインストールされている場合、修復/アンインストール プログラムとしても機能するインストーラーを作成する必要があります。

プログラムが存在するかどうかを確認し、それに応じてボタンを表示するカスタム ページを作成することができました (レジストリ キーの作成はテスト目的のみであり、インストール プロセスに含める必要があります)。

たとえば、プログラムがインストールされていない場合は、[インストール] ボタンが表示されます。

これを行うコードは次のとおりです。

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

問題は、それがすべて関数によって管理されており、それらの中で新しいページ マクロを宣言できないことです。そのため、セクションを介して適切なインストールを続行できません。

通常のインストールのようにユーザーフレンドリーなページを作成できるようにするには、インストーラーが実行するさまざまなアクションをどのように管理すればよいですか?

少し面倒で複雑に聞こえるので、すべてのアクションにカスタム ページを使用する必要がありますか?

4

1 に答える 1