Как включить две пользовательских страницы в NSIS?
Я создал EXE-файл, используя скрипт NSIS. Я создал пользовательскую страницу, используя следующий код,
page custom check
Function check
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My app" "UninstallString"
IfFileExists $R0 +1 NotInstalled
call nsDialogpage
NotInstalled:
FunctionEnd
Function nsDialogpage
nsDialogs::Create 1018
Pop $Dialog12
${If} $Dialog12 == error
Abort
${EndIf}
${NSD_CreateRadioButton} 0 5u 100% 10u "Repair"
Pop $Repair
${NSD_CreateRadioButton} 0 25u 100% 56u "Remove"
Pop $Remove
${NSD_SetState} $Repair ${BST_CHECKED}
${NSD_GetState} $Repair $test
--Do repair operation--
${NSD_OnClick} $Remove "Remove"
nsDialogs::Show
${NSD_GetState} $Remove $RadioButton_State
${If} $RadioButton_State == ${BST_CHECKED}
call Removed
${Else}
Goto Done
${EndIf}
Done:
FunctionEnd
Function Remove
nsDialogs::Create 1018
Pop $Dialog12
${If} $Dialog12 == error
Abort
${EndIf}
--Do remove function--
/* nsDialogs::Show*/
FunctionEnd
Если я запускаю приведенный выше код, он не работает. Никакой код не выполняется после функции show. Если я даю функцию show перед функцией, и она выдает мне исключение времени выполнения. Потому что внутри функции Remove также есть еще одна функция show().
Мое требование
Если пользователь нажимает переключатель "Удалить", переходит на следующую страницу и выполняет процесс удаления, и страница заканчивается. Я пробовал этот сценарий с использованием приведенного выше кода. Но он работает нормально.
Как включить две пользовательских страницы в установщик nsis?
Может кто-нибудь мне помочь?
Благодарю.
2 ответа
Вы можете добавить две пользовательские страницы точно так же, как вы добавляете пользовательскую страницу:
Page custom check
Page custom Remove
Как сказал Андерс, все, что вы ставите после nsDialogs::Show
не выполняется Вам нужно переместить этот код в новую функцию "выхода":
Var RemoveRequested
Function RemoveCheck
${NSD_GetState} $Remove $RadioButton_State
${If} $RadioButton_State == ${BST_CHECKED}
StrCpy $RemoveRequested "1"
${Else}
StrCpy $RemoveRequested "0"
${EndIf}
FunctioEnd
Вы сохраняете выбор пользователя в глобальной переменной $RemoveRequested
, Затем на следующей пользовательской странице вы можете проверить эту переменную и сделать все, что вам нужно, или просто Abort
и вторая страница не будет отображаться.
А затем вам нужно изменить объявление пользовательских страниц:
Page custom check RemoveCheck
Page custom Remove
Сейчас, check
будет использоваться для показа пользовательской страницы, а когда пользователь покидает страницу (== нажимает "Далее"), функция RemoveCheck
будет выполнен.
Ваша функция Remove должна проверять флаг, который мы только что создали:
Function Remove
${If} $RemoveRequested == "1"
nsDialogs::Create 1018
Pop $Dialog12
${If} $Dialog12 == error
Abort
${EndIf}
--Do remove function--
/* nsDialogs::Show*/
${EndIf}
FunctionEnd
После nsDialogs::Show
страница в основном исчезла, сделайте свою работу в обратном вызове Page custom nsDialogpage dotheradiocheckinthisfunction