【问题标题】:Start elevated application on OS startup, without UAC prompt在操作系统启动时启动提升的应用程序,没有 UAC 提示
【发布时间】:2020-08-05 20:59:29
【问题描述】:

我正在为 Windows 开发一个包含两个组件的程序:

  1. 内核驱动程序(使用 EV 证书签名)
  2. 用户级 GUI 组件,.exe 文件(用 Delphi 编写)。

.exe 需要以提升的权限运行,才能启动驱动程序并执行其他提升的任务。

这样的程序如何在Windows启动时自动运行而不显示UAC提示?

我看到许多类似的应用程序,例如反恶意软件程序,都能够在没有 UAC 提示的情况下启动提升。

我正在考虑以下选项,如果您能指出正确的方向,我将不胜感激:

1.设置驱动启动为自动,从内核服务启动.exe

但是,我的研究表明,没有记录在案的方法可以从内核启动用户级进程。

2。创建一个单独的用户级服务,它将启动 .exe

我了解到用户级服务不受 UAC 影响。

一种可能的方法是创建一个自动启动的用户级服务,它只运行 .exe 进程(使用CreateProcessAsUser())然后自行终止。

3.将 .exe 程序从 Delphi GUI 应用程序转换为用户级服务

与选项 2 类似,但我们不是为服务创建单独的 .exe,而是将当前的 GUI 应用程序转换为也作为服务工作。 我在this StackOverflow thread 上找到了一些关于此的文档。 但是,这种方法似乎比创建单独的专用服务更复杂。

4. EV 证书是否提供了一些优势来执行此任务?

5.除了上面提到的还有什么更好的方法吗?

【问题讨论】:

  • 保持简单,有一个 GUI 部分和一个在 System 帐户下运行的服务部分,并在这两者之间建立 IPC。如果 gui 部分需要执行提升的操作,它可以指示服务携带那些(假设您不需要在提升部分进行 GUI 交互)
  • 在不编写单独服务的情况下执行提升任务的另一种方法是让.exe 生成自身的提升副本,其中副本仅执行任务然后退出。但这需要在每次生成任务时提示用户提升,但至少主进程不需要启动提升,这不需要制作单独的可执行文件。
  • 如果我创建一个简单的服务,它只是启动主进程,提升?我想这会更方便(在这种情况下),然后必须在服务和 GUI 之间拆分代码。对于 Delphi 应用程序,GUI 代码通常与逻辑混合在一起。
  • 如果您存储了足够的凭据,任务计划程序可以执行此操作。

标签: windows delphi startup uac elevated-privileges


【解决方案1】:

正如 Sertac Akyuz 在他的评论中指出的那样,您应该为此使用 windows Task Schedluer。

使用任务计划程序,您可以创建一个将在用户登录时运行的任务,并以可用的最高权限运行您的 EXE。

当我说可用的最高权限时,我的意思是当您在When running the task, use the following user account 字段中指定一组用户时,当前用户的最高权限,前提是当前用户是该组的成员。因此,如果当前用户没有足够的权限以提升的权限执行程序,则任务将以标准权限执行您的应用程序。

但正如字段名称所暗示的那样,您还可以指定此任务将始终使用特定用户帐户运行您的应用程序,这意味着它将使用该帐户权限级别而不是当前用户帐户。

任何使用任务调度程序来执行某些驱动程序附带的 GUI 应用程序的方式都非常流行。例如,华硕使用这种方法来启动他们的 AI Suite 程序,该程序允许监控和调整其主板的各种设置。这是在我的计算机上配置此类任务的方式。

PS:我特意选择向您展示 ASUS AI Suite 的任务属性,因为它实际上是用 Delphi 制作的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多