Nsis 安装完成后,创建自定义页面

Nsis 安装完成后,创建自定义页面,nsis,electron-builder,Nsis,Electron Builder,我正在编写一个脚本,该脚本正在安装我在electron中制作的应用程序,到目前为止,一切似乎都运行良好。但是有一个问题,我可以添加新的自定义页面,但它是在安装之前添加的。这是一个问题,因为此页面包含两个用户必须填写的输入字段,然后提供的数据存储在安装应用程序的目录中。但由于此步骤之后安装了应用程序,所以目录会被覆盖,文件也会消失。代码如下: !include nsDialogs.nsh !include LogicLib.nsh XPStyle on Var Dialog Var UserL

我正在编写一个脚本,该脚本正在安装我在electron中制作的应用程序,到目前为止,一切似乎都运行良好。但是有一个问题,我可以添加新的自定义页面,但它是在安装之前添加的。这是一个问题,因为此页面包含两个用户必须填写的输入字段,然后提供的数据存储在安装应用程序的目录中。但由于此步骤之后安装了应用程序,所以目录会被覆盖,文件也会消失。代码如下:

!include nsDialogs.nsh
!include LogicLib.nsh

XPStyle on

Var Dialog
Var UserLabel
Var UserText
Var UserState
Var PassLabel
Var PassText
Var PassState

Page custom nsDialogsPage nsDialogsPageLeave

Function nsDialogsPage

    nsDialogs::Create 1018
    Pop $Dialog

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

    ${NSD_CreateLabel} 0 0 100% 12u "Username:"
    Pop $UserLabel

    ${NSD_CreateText} 0 13u 100% 12u $UserState
    Pop $UserText

    ${NSD_CreateLabel} 0 39u 100% 12u "Password:"
    Pop $PassLabel

    ${NSD_CreatePassword} 0 52u 100% 12u $PassState
    Pop $PassText

    nsDialogs::Show

FunctionEnd

Function nsDialogsPageLeave

    ${NSD_GetText} $UserText $UserState
    ${NSD_GetText} $PassText $PassState

    ${If} $UserState == ""
        MessageBox MB_OK "Username is missing."
        Abort
    ${EndIf}

    ${If} $PassState == ""
        MessageBox MB_OK "Password is missing."
        Abort
    ${EndIf}

    StrCpy $1 $UserState
    StrCpy $2 $PassState

    FileOpen $9 $INSTDIR\credentials.txt w
    FileWrite $9 "$1:$2"
    FileClose $9
    SetFileAttributes $INSTDIR\credentials.txt HIDDEN|READONLY

FunctionEnd

Section
SectionEnd

因此,是的,最好是在安装之后,而不是安装之前拥有此页面。感谢您提供的所有指导,我对NSIS完全陌生,因此我不知道如何完成此任务。

页面的显示顺序与源文件中的显示顺序相同,因此您可以执行以下操作:

Page Directory
Page InstFiles
Page Custom MyPage
理想情况下,您应该在安装步骤(
InstFiles
)之前收集所需的信息,并且您已经差不多做到了。您的自定义页面将信息存储在全局变量中,您只需将
文件*
操作移动到
部分
。如果您这样做,那么您的自定义页面可以随时出现在
InstFiles
页面之前。

您可以在安装前和安装后更改为插入页面。 示例if installer.nsh

!include nsDialogs.nsh

!macro customPageAfterChangeDir
Page custom customPageCreator customPageLeave "Custom page caption"

Var Dialog

Function customPageCreator
    nsDialogs::Create 1018
    Pop $Dialog
    
    ${If} $Dialog == error
        Abort
    ${EndIf} 
    
    MessageBox MB_OK "customPageCreator"

    nsDialogs::Show
FunctionEnd

Function customPageLeave
    MessageBox MB_OK "customPageLeave"
FunctionEnd
!macroend

啊,我试过了,但如果我这样做,这个安装程序会执行两次安装,因为某种原因,在自定义MyPage之后,它会再次运行默认安装程序,我想这与electron builder编译它有关。这是可能的,我不知道electron builder是如何工作的。然后你必须接受我的其他建议,在不同的时间将收集和编写分为两个不同的步骤。你的示例代码缺少所有其他页面行,你的问题是关于页面顺序的!我尝试放置其他页面,但它们会执行两次,例如,如果您放置
页面InstFiles
它将安装应用程序,然后再次启动默认安装程序并再次安装,可能在electron builder中有这样的配置,我不知道为什么会发生这种情况。