NSIS 安装程序静默运行应用程序——电子

Posted

技术标签:

【中文标题】NSIS 安装程序静默运行应用程序——电子【英文标题】:NSIS Installer Silent run app -- Electron 【发布时间】:2021-06-28 11:47:16 【问题描述】:

我们有一个电子应用程序,它使用自定义 nsis 脚本进行安装程序。虽然这可以正常工作,但由于某种原因,如果应用程序以静默模式安装,我无法触发应用程序自动启动。

如果应用程序安装正常(例如:双击.exe,它会自动启动),但是如果从命令行使用类似:

"installer.exe" /S

它似乎没有自动启动。

目前使用的安装程序脚本 (installer.nsh):

!macro preInit
   SetRegView 64 ... some reg things -- OK
   SetRegView 32 ... some reg things -- OK
!macroend

!macro customInit
; SHUT DOWN APP IF CURRENTLY RUNNING
$GetProcessInfo 0 $0 $1 $2 $3 $4
    $if $3 != "$APP_EXECUTABLE_FILENAME"
    $nsProcess::FindProcess "$APP_EXECUTABLE_FILENAME" $R0
    $If $R0 == 0
      ;MessageBox MB_OK "App currently running - going to shutdown to install new version"
      $nsProcess::CloseProcess "$APP_EXECUTABLE_FILENAME" $R0
      Sleep 5000
      $nsProcess::KillProcess "$APP_EXECUTABLE_FILENAME" $R0
      Sleep 3000
   $EndIf
   $nsProcess::Unload
$endIf

; Workaround for installer handing when the app directory is removed manually
$ifNot $FileExists "$INSTDIR"
  DeleteRegKey HKCU ...other reg thing
$EndIf

!macroend

 ---the culprit---
 Function .onInstSuccess
 IfSilent +2 0  
   Exec '"$INSTDIR\app.exe"'
 FunctionEnd

我尝试了不同的变体:

Function .onInstSuccess
    IfSilent +2 0
    Exec '"Absolute\Path\To\app.exe"'
FunctionEnd

或者,在 customInit 宏中设置类似:SetSilent normal 的内容会触发类似双击出现安装程序屏幕的 .exe 时的行为。

非常感谢任何想法或建议。

【问题讨论】:

【参考方案1】:

IfSilent +2 0 跳过Exec 如果安装程序是静默的!只需删除该行。

静默安装程序通常不会启动应用程序,因此理想情况下您不应更改任何内容。

【讨论】:

我需要确定安装程序是否以静默模式运行,就像它以双击/常规模式运行一样,它会自动启动。 (在这种情况下,需要静默安装,因为它是这样运行的要求,是部署的一部分) 去掉了这条线,还是不行,安装后app没有启动 如果将 Exec 更改为 MessageBox 会发生什么? 什么都不会弹出,比如在静默模式下完全忽略该钩子中的任何内容【参考方案2】:

由于应用程序是使用电子和电子构建器构建的,即使提供了自定义 .nsh 文件,如果以手动模式安装,应用程序仍然无法启动,正如 here 指出的那样。

经过一番研究,如果在命令行参数中提供了该功能,则可以重新启用该功能 (pointed out here)

myAppInstaller.exe /S --force-run

【讨论】:

以上是关于NSIS 安装程序静默运行应用程序——电子的主要内容,如果未能解决你的问题,请参考以下文章

NSIS 构建不会在 Windows 上安装 Electron 应用程序。安装程序静默退出并产生 1620 错​​误

NSIS 的卸载程序运行速度非常快

关于NSIS静默安装在控制面板上自定义卸载图标?

根据安装程序的 NSIS 卸载程序权限

软件静默安装参数扫描原理

使用 electron-builder NSIS 安装程序安装后运行时如何传递命令行参数