在 OS 启动时启动提升的应用程序,没有 UAC 提示

Start elevated application on OS startup, without UAC prompt

我正在为 Windows 开发一个程序,它由两个部分组成:

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

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

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

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

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

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

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

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

我了解到用户级服务不受 UAC 约束。

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

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

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

4. EV 证书是否提供了允许此任务的一些优势?

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

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

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

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

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

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

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

制作的