如何静默自动更新通过 NSIS 为所有用户/每台机器安装的电子应用程序?

Posted

技术标签:

【中文标题】如何静默自动更新通过 NSIS 为所有用户/每台机器安装的电子应用程序?【英文标题】:How to silently auto-update an electron application that is installed via NSIS for all users / per-machine? 【发布时间】:2021-05-22 13:19:37 【问题描述】:

项目: 我们使用由 electron-builder 构建的 NSIS 安装程序创建了一个电子应用程序,该应用程序交付给我们的用户(主要使用 Windows)。

场景: 我们的用户是将我们的应用程序安装到其所有员工的 Windows 终端服务器上的“C:\Program Files”文件夹中的公司。工作人员 - 正在使用我们的软件并在新版本发布后看到相关的更新通知 - 大多数时候由于缺乏必要的权限而无法安装更新。

问题: 我们不仅要解决上述问题,还要更进一步:我们希望我们的应用程序能够静默更新。在上述情况下,有哪些可能的解决方案可以实现这一点?

【问题讨论】:

【参考方案1】:

如果您改为按用户安装,那么普通用户当然可以写入目录。

另一个选择是切换到 MSI。普通用户可以在没有 UAC 提升的情况下修补已签名的 MSI 包。这称为User Account Control (UAC) Patching。

第三种选择是创建运行安装程序的 NT 服务。可以配置服务,以便普通用户可以启动它们。计划任务也可能有效。

【讨论】:

感谢您的回答!我们的客户不想按用户安装,因为 1. 他们需要在每个客户端/用户帐户上安装我们的应用程序 2. 另一个程序使用不支持环境变量的硬编码路径调用我们的应用程序(它可能是批处理文件)。 MSI 选项很有趣。不幸的是,尽管电子更新器不支持它,我们需要自己编写这样的机制。有没有你知道的现成解决方案?关于服务:如果exe在不同的用户帐户上运行并且因此无法覆盖怎么办? 这样的 NT 服务能否在开始安装更新之前杀死我们应用程序的所有正在运行的实例(在所有用户会话中)?目前这听起来对我来说是最有希望的解决方案。 该服务可以作为系统运行,并且可以在所有会话中访问和杀死。如果这样做是个好主意是另一个问题...... 我会接受您的回答,因为您的建议对我们很有帮助。我们现在将评估不同的可能性。谢谢安德斯!

以上是关于如何静默自动更新通过 NSIS 为所有用户/每台机器安装的电子应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

通过 NSIS 静默运行 Powershell

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

无需用户干预即可自动更新 Android 应用程序

钉钉静默安装

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

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