【问题标题】:Automatically update Free Pascal program at program startup, without admin prompt在程序启动时自动更新 Free Pascal 程序,无需管理员提示
【发布时间】:2024-01-19 17:33:01
【问题描述】:

许多 Windows 程序可以在启动时运行更新,而无需管理员提示。同样,我的程序需要自行更新,无需任何用户输入。任何登录的用户都需要能够使用该程序。

我的程序已经可以找到新的更新、下载并运行它们,但 NSIS 安装程序/更新程序需要管理员权限。

如果不让所有用户访问安装目录,我需要做什么才能使用 Free Pascal 和 NSIS 实现这一点?

【问题讨论】:

  • 安装服务进行更新。或者安装到标准用户可以写的目录。
  • @David “服务”到底是什么意思?可以举个例子吗?
  • 如果您不知道服务是什么,出于安全原因,您不应该编写服务。选择第二个选项。
  • Windows 服务的网络搜索。但是,如果您不知道是什么,那么您可能还没有准备好完成这项任务。
  • 如果您询问是否可以绕过 UAC 提示,那么不,您不能。这是设计使然。

标签: windows nsis freepascal


【解决方案1】:

您的应用程序重要到需要这样做吗?您实际上计划多久发布一次更新?

大多数应用程序可能只需在每次需要安装更新时使用 UAC 进行升级即可。

如果你绝对觉得你需要“绕过 UAC”,那么你可以做 Firefox 所做的事情;安装NT Service。您无需在安装程序中启动此服务,但您必须调用 GetNamedSecurityInfo+SetNamedSecurityInfo,以便您可以将 Everyone 组的 SERVICE_START 访问权限添加到 ACL。以普通用户身份运行的应用程序可以在有更新时启动此服务,并且该服务会执行更新。

从安全的角度来看,这里存在一些危险,因为该服务运行时可以完全访问系统,因此您必须确保您的更新已签名,这样它就不会成为一个易于使用的后门,如果有人能够执行中间人攻击。

我个人认为,如果您的程序不太大,您应该考虑按用户安装...

【讨论】: