0

修理と削除用の2つのラジオボタンを備えたカスタマイズページを作成しました.ユーザーが修理ボタンを選択すると、修理の楽しみになります.しかし、再び修理と削除ページである古いページに移動します.ユーザーは両方のオプションを選択します.私の要件はユーザーは 1 つのオプションのみを選択し、対応するアクションのみを実行します。両方のボタンを選択するオプションを提供する必要はありません。

     Function nsDialogpage
    nsDialogs::Create 1018
    Pop $Dialog
    ${If} $Dialog == error
       Abort
    ${EndIf}
    ${NSD_CreateRadioButton} 0 5u 100% 10u "Repair"
    Pop $Repair
    ${NSD_AddStyle} $Repair ${WS_GROUP}
    ${NSD_OnClick} $Repair Repair 
    ${NSD_CreateRadioButton} 0 25u 100% 56u "Remove"
    Pop $Remove
    ${NSD_OnClick} $Remove Remove
    nsDialogs::Show
FunctionEnd
Function Repair
-- Do repair function.
FunctionEnd
Function Remove
   ExecWait "$INSTDIR\uninstall.exe"
   Quit
FunctionEnd

また、楽しみを削除する場合は、インストーラーを削除してインストールを終了してください。アンインストーラーは正常に完了しましたが、ユーザーがいずれかのボタンをクリックした後、インストーラーは再びメイン ページに移動し、インストール手順からのみ終了します。

1.ユーザーはいずれかのオプションを選択し、この修復および削除ページを離れます。

2.ユーザーが削除オプションをクリックした場合、インストーラーを削除し、すぐにプロセスを終了します。

4

1 に答える 1

0

ページ アクション コールバックで使用すると、Quit はすぐには終了せず、ページが変更されると終了します。ラジオ ボタンがクリックされたときに何らかのアクションを実行することは、Windows の通常の動作ではありません (TAB を押してみてください) ので、通常の例も追加しました。

!include nsDialogs.nsh
Page Custom RepairOrRemovePageInsane_Create
Page Custom RepairOrRemovePageNormal_Create RepairOrRemovePageNormal_Leave
Page InstFiles

Function Remove
ExecWait '"cmd" /C echo This is a dummy uninstall command...&pause' ; Call real uninstaller here
FunctionEnd

Function Repair
# Do repair....
FunctionEnd

Function RepairOrRemovePageInsane_Create
nsDialogs::Create 1018
Pop $0
${NSD_CreateRadioButton} 0 5u 100% 10u "Repair"
Pop $0
SendMessage $HWNDPARENT ${WM_NEXTDLGCTL} $0 1
${NSD_OnClick} $0 RepairInsane
${NSD_CreateRadioButton} 0 25u 100% 56u "Remove"
Pop $0
${NSD_OnClick} $0 RemoveInsane
GetDlgItem $0 $hwndparent 1 ; Get Next button handle and
EnableWindow $0 0 ; ...disable it because it does not make sense with this insane radio button handling
nsDialogs::Show
FunctionEnd

Function RemoveInsane
Call Remove
SendMessage $HWNDPARENT ${WM_CLOSE} 0 0 
FunctionEnd

Function RepairInsane
Call Repair
SendMessage $HWNDPARENT 0x408 1 0 ; Go to next page
FunctionEnd

Function RepairOrRemovePageNormal_Create
nsDialogs::Create 1018
Pop $1
${NSD_CreateRadioButton} 0 5u 100% 10u "Repair"
Pop $1
${NSD_CreateRadioButton} 0 25u 100% 56u "Remove"
Pop $2
SendMessage $1 ${BM_CLICK} 0 0 ; Select one of them by default
nsDialogs::Show
FunctionEnd

Function RepairOrRemovePageNormal_Leave
${NSD_GetState} $1 $0
${If} $0 <> 0
    Call Repair
${Else}
    Call Remove
    Quit
${EndIf}
FunctionEnd
于 2012-11-21T04:10:18.093 に答える