使用NSIS进行即时操作的单选按钮?

使用NSIS进行即时操作的单选按钮?,nsis,Nsis,我已经创建了带有两个修复和删除单选按钮的自定义页面。如果用户选择修复按钮,它将用于修复乐趣。但再次转到旧页面,即修复和删除页面。因此,用户选择了两个选项。我的要求是用户只选择一个选项,并只执行相应的操作。无需提供选择两个选项的选项按钮 Function nsDialogpage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD

我已经创建了带有两个修复和删除单选按钮的自定义页面。如果用户选择修复按钮,它将用于修复乐趣。但再次转到旧页面,即修复和删除页面。因此,用户选择了两个选项。我的要求是用户只选择一个选项,并只执行相应的操作。无需提供选择两个选项的选项按钮

     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.如果用户单击“删除”选项,请删除安装程序并立即退出该过程

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

请发布更多的代码…你说离开维修页面1是什么意思?您想让它转到下一页还是退出?如果用户选择“修复”按钮,请转到“修复”功能并继续执行下一页。在我的情况下,如果用户选择“修复”选项,它会一次又一次转到“修复”页。它会转到nsDialogpage页。然后只转到下一页。我认为这不是一个好的安装程序。