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

时间:2018-03-14 01:15:11

标签: nsis electron-builder

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

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

修改

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

  • 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
    

详细信息位于electron-builder NSIS configurationelectron-builder NSIS template

谢谢!

1 个答案:

答案 0 :(得分:0)

是的,您可以使用windExec手动执行此操作:

GetParameters

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

!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

我对电子工程师一无所知,但我认为有一种方法可以让你以某种方式自定义NSIS脚本。