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 安装程序静默运行应用程序——电子的主要内容,如果未能解决你的问题,请参考以下文章