如何在NSIS脚本中使用REMOVE或REPAIR功能?

时间:2012-11-15 09:16:50

标签: nsis

我已经使用nsis脚本来创建安装程序。当我第二次使用相同的名称运行我的安装程序时,应检查REPAIR和REMOVE并执行相应的操作。我已经找到我的应用程序已安装或未使用以下代码,< / p>

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安装程序的功能。我如何调用这些功能?我尝试过调用方法,但它没有用。

1 个答案:

答案 0 :(得分:1)

您需要指定一个回调函数,就像在nsDialogs documentation中一样,在此示例中查找nsDialogsPageLeave函数:

!include nsDialogs.nsh
!include LogicLib.nsh

Name nsDialogs
OutFile nsDialogs.exe

XPStyle on

Var Dialog
Var Label
Var Text

Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles

Function nsDialogsPage

    nsDialogs::Create 1018
    Pop $Dialog

    ${If} $Dialog == error
        Abort
    ${EndIf}

    ${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
    Pop $Label

    ${NSD_CreateText} 0 13u 100% -13u "Type something here..."
    Pop $Text
    ${NSD_OnChange} $Text nsDialogsPageTextChange

    nsDialogs::Show

FunctionEnd

Function nsDialogsPageLeave

    ${NSD_GetText} $Text $0
    MessageBox MB_OK "You typed:$\n$\n$0"

FunctionEnd

Function nsDialogsPageTextChange
    Pop $1 # $1 == $ Text
    ${NSD_GetText} $Text $0
    ${If} $0 == "hello"
        MessageBox MB_OK "right back at ya!"
    ${EndIf}
FunctionEnd

Section
    DetailPrint "hello world"
SectionEnd