如何在NSIS脚本中使用删除或修复功能?

如何在NSIS脚本中使用删除或修复功能?,nsis,Nsis,我使用nsis脚本创建安装程序。当我以相同的名称再次运行安装程序时,应检查修复和删除并执行相应的操作。我发现我的应用程序已安装或未使用以下代码 Function checkinstall ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My app" "UninstallString" IfFileExists $R0 +1 NotInstalled call nsDialogp

我使用nsis脚本创建安装程序。当我以相同的名称再次运行安装程序时,应检查修复和删除并执行相应的操作。我发现我的应用程序已安装或未使用以下代码

Function checkinstall
   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 $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
    ${NSD_CreateRadioButton} 0 5u 100% 10u "Repair"
        Pop $hwnd
        ${NSD_AddStyle} $hwnd ${WS_GROUP}
        ${NSD_OnClick} $hwnd ???
    ${NSD_CreateRadioButton} 0 25u 100% 56u "Remove"
        Pop $hwnd
        ${NSD_OnClick} $hwnd ???
    nsDialogs::Show
如果用户选择“修复”按钮,它将覆盖现有的安装路径,否则将卸载现有的已安装并继续使用新的安装路径。我需要做什么来替换???上述代码的

page custom checkinstall
!insertmacro MUI_PAGE_DIRECTORY
我的下一页是目录选择。所以我需要调用此页?如何做到这一点

1.如果用户选择删除按钮,如何调用un installer函数

   Function un.Init, section /o -un.Main UNSEC000,section -un.post UNSE001

这些是un安装程序函数。我如何调用这些函数?我尝试了call方法,但它不起作用。

您需要指定一个回调函数,如中所示,在本例中查找nsDialogsPageLeave函数:

!包括nsDialogs.nsh !包括LogicLib.nsh 名称对话框 OutFile nsDialogs.exe XPStyle on 变量对话框 变量标签 可变文本 页面自定义nsDialogsPage nsDialogsPageLeave 页面文件 函数nsDialogsPage nsDialogs::创建1018 弹出$对话框 ${If}$Dialog==错误 中止 ${EndIf} ${NSD_CreateLabel}0 100%12u您好,欢迎使用nsDialogs! Pop$标签 ${NSD_CreateText}0 13u 100%-13u在此处键入某些内容。。。 Pop$文本 ${NSD_OnChange}$Text nsDialogsPageTextChange nsDialogs::Show 功能端 函数nsDialogsPageLeave ${NSD_GetText}$Text$0 MessageBox MB\u确定您键入的:$\n$\n$0 功能端 函数nsDialogsPageTextChange Pop$1$1==$Text ${NSD_GetText}$Text$0 ${If}$0==hello MessageBox MB_好的,马上回来! ${EndIf} 功能端 部分 详细打印hello world 分段结束
您需要指定一个回调函数,如中所示,在本例中查找nsDialogsPageLeave函数:

!包括nsDialogs.nsh !包括LogicLib.nsh 名称对话框 OutFile nsDialogs.exe XPStyle on 变量对话框 变量标签 可变文本 页面自定义nsDialogsPage nsDialogsPageLeave 页面文件 函数nsDialogsPage nsDialogs::创建1018 弹出$对话框 ${If}$Dialog==错误 中止 ${EndIf} ${NSD_CreateLabel}0 100%12u您好,欢迎使用nsDialogs! Pop$标签 ${NSD_CreateText}0 13u 100%-13u在此处键入某些内容。。。 Pop$文本 ${NSD_OnChange}$Text nsDialogsPageTextChange nsDialogs::Show 功能端 函数nsDialogsPageLeave ${NSD_GetText}$Text$0 MessageBox MB\u确定您键入的:$\n$\n$0 功能端 函数nsDialogsPageTextChange Pop$1$1==$Text ${NSD_GetText}$Text$0 ${If}$0==hello MessageBox MB_好的,马上回来! ${EndIf} 功能端 部分 详细打印hello world 分段结束
谢谢。但是如果用户选择“删除”按钮,我如何调用卸载程序功能?因为un.Init,section/o-un.Main UNSEC000这些都是un安装程序功能。我已经尝试过了${NSD_OnClick$hwnd un.Init。它只返回错误消息。我也编辑了我的问题。我想你不能从安装程序调用un.Init,但是如果你用WriteUninstaller uninstaller.exe创建uninstaller,你可以用ExecWait$INSTDIR\uninstall.exe调用它。谢谢。但是如果用户选择了“删除”按钮,我怎么调用卸载程序函数呢因为un.Init,第/o节-un.Main UNSEC000这些是un安装程序的功能。我尝试了${NSD_OnClick$hwnd un.Init。它只返回错误消息。我也编辑了我的问题。我想你不能从安装程序调用un.Init,但是如果你用writeunninstaller unistaller.exe创建unistaller,你可以用ExecWait$INSTDIR\uninstall.exe调用它