【问题标题】:Auto update Windows C++ application from non privileged (standard) user account从非特权(标准)用户帐户自动更新 Windows C++ 应用程序
【发布时间】:2020-08-19 14:57:36
【问题描述】:

我有一个 C++ 主应用程序,它将安装在 Program Files 文件夹中并在 UAC 控制下,即非特权用户无法写入或更改主应用程序文件夹内的数据。

我还有一个自动更新 C++ 应用程序,它将用于在没有标准用户干预的情况下自动更新主应用程序。

由于标准用户是应用程序的常规用户并且系统远离管理员的物理访问,我想知道如何使用登录系统的标准用户自动更新我的应用程序。

我知道的一种方法是从管理员帐户创建和安装一项服务,该服务可以从标准用户帐户更新应用程序。

如果我不想使用创建服务作为自动更新我的应用程序的选项,还有其他方法/工具可以帮助我吗?

【问题讨论】:

  • 取决于具体的用例 - 如果用户在技术上是管理员并且您只是希望您的自动更新程序在没有 UAC 提示的情况下运行,您可以创建一个设置了“使用最高权限”标志的计划任务. (创建任务需要提升权限,但运行任务时不需要 UAC 确认。)
  • 只要安装程序具有管理员权限,您就可以在服务会话中创建以 SYSTEM 身份运行的更新任务。我认为您不希望它要求以交互式会话的用户身份运行。

标签: windows auto-update


【解决方案1】:

如果这是您的应用程序,并且您正在生成安装程序,您可以实现所谓的“用户安装”,即应用程序不是安装到C:\Program Files,而是安装到C:\Users\<user folder>\AppData\Local\<Application Folder>。缺点:该特定用户可以使用应用程序,另一个用户应该为自己单独安装应用程序,但您可以在不需要管理员权限的情况下更新它。如果您的应用程序安装在“程序文件”以外的其他位置,您可能还需要检查它是否可以工作。就是这样。

【讨论】:

  • 要求标准用户不能在应用程序文件夹中写入/更改内容,只有更新应用程序才能更改应用程序文件夹的内容。这就是我将它安装在 Program Files 中的原因。安装在 C:\Users\\AppData\Local\ 将授予用户更新文件夹内容的完整权限。
  • 那么您只能安排在具有管理员权限的帐户下运行并更新应用程序的任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多