我使用NSIS脚本创建了EXE文件。我使用以下代码创建了自定义页面,
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 function之后执行。如果我在functionEnd之前给出show函数它会抛出运行时异常。因为在Remove函数里面还有一个show()。
我的要求是,
如果用户单击删除单选按钮,则转到下一页并执行卸载过程,页面结束。我已使用上面的代码尝试过这种情况。但它工作正常。
如何在nsis安装程序中包含两个自定义页面?
任何人都可以帮助我吗?
感谢。
答案 0 :(得分:2)
您可以像添加自定义页面一样添加两个自定义页面:
Page custom check
Page custom Remove
正如 Anders 所说,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
。
你的删除功能应该检查我们刚创建的标志:
Function Remove
${If} $RemoveRequested == "1"
nsDialogs::Create 1018
Pop $Dialog12
${If} $Dialog12 == error
Abort
${EndIf}
--Do remove function--
/* nsDialogs::Show*/
${EndIf}
FunctionEnd
答案 1 :(得分:0)
在nsDialogs::Show
页面基本消失后,请在留言回调中完成工作:Page custom nsDialogpage dotheradiocheckinthisfunction