使用电子构建器 NSIS 安装程序安装后运行时如何传递命令行参数

Geo*_* S. 5 nsis electron-builder

使用电子构建器 NSIS 安装程序,我们可以创建一个可执行安装程序,该安装程序在安装完成后立即启动已安装的电子应用程序。我的问题是,有没有办法在第一次启动时将安装程序本身启动时使用的任何命令行参数传递给已安装的应用程序?

我见过一些 NSIS 自定义脚本,这些脚本建议可以使用 启动可执行文件Exec,并且可以使用 检索安装程序参数GetParameters。这是推荐的方向,还是电子构建器或 NSIS 中有一些配置选项?

编辑:

这是一个可能的解决方案:

  • 将 Electron-builder 选项设置nsis.runAfterFinish为 false(true 是默认值);
  • 实现customInstall事件处理程序来自定义普通的电子构建器提供的模板:

    !macro StartAppWithParameters
        Var /GLOBAL startAppWithParametersArgs
        ${if} ${isUpdated}
            StrCpy $startAppWithParametersArgs "--updated"
        ${else}
            StrCpy $startAppWithParametersArgs ""
        ${endif}
        ${StdUtils.GetAllParameters} $R0 0
        ${StdUtils.ExecShellAsUser} $0 "$launchLink" "open" '$startAppWithParametersArgs $R0'
    !macroend
    
    !macro customInstall
        HideWindow
        !insertmacro StartAppWithParameters
    !macroend
    
    Run Code Online (Sandbox Code Playgroud)

详细信息位于电子构建器 NSIS 配置电子构建器 NSIS 模板中

谢谢!

And*_*ers 1

是的,您可以使用Exec和手动执行此操作GetParameters

!include "FileFunc.nsh"
!include "MUI2.nsh"

!macro RunWithInstallersParameters app
Push "${app}"
Call RunWithInstallersParameters
!macroend
Function RunWithInstallersParameters
Exch $0
Push $1
${GetParameters} $1
Exec '"$0" $1'
Pop $1
Pop $0
FunctionEnd

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION MyFinishRun
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English

Function MyFinishRun
!insertmacro RunWithInstallersParameters "$sysdir\Calc.exe"
FunctionEnd

Section
SetOutPath $InstDir
File "blahblah"
!insertmacro RunWithInstallersParameters "$windir\Notepad.exe"
SectionEnd
Run Code Online (Sandbox Code Playgroud)

MUI Finish 页面还支持直接指定参数的方法,但由于我们在编译时不知道参数,因此必须使用变量:

!include "FileFunc.nsh"
!include "MUI2.nsh"

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN "$windir\Notepad.exe"
!define MUI_FINISHPAGE_RUN_PARAMETERS $1 ; Initialized by our MUI_PAGE_CUSTOMFUNCTION_SHOW function
!define MUI_PAGE_CUSTOMFUNCTION_SHOW InitFinishPage
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE English

Function InitFinishPage
${GetParameters} $1
FunctionEnd
Run Code Online (Sandbox Code Playgroud)

我对电子构建器一无所知,但我认为有一种方法可以让您以某种方式自定义 NSIS 脚本。