在操作系统启动时启动升高的应用程序,没有UAC提示。

问题描述 投票:1回答:1

我正在为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应用程序也转换为服务工作。这个StackOverflow线程.然而,这种方法似乎更复杂,然后创建一个单独的专用服务。

4. EV证书是否能提供一些优势来完成这个任务?

5. 除了上面提到的方法,还有其他更好的方法吗?

windows delphi startup uac elevated-privileges
1个回答
1
投票

正如Sertac Akyuz在他的评论中指出的那样,你应该使用windows任务调度器来完成这个任务。

使用任务调度器,你可以创建一个任务,将运行在用户登录和运行EXE的最高权限可用。

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

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

任何方式使用任务调度器来执行GUI应用程序,与一些驱动程序是相当流行的。例如,华硕使用这种方法来启动他们的AI Suite程序,允许监控和调整主板的各种设置。下面是我电脑上这种任务的配置。

ASUS AI Suite II task properties - GeneralASUS AI Suite II task properties - TriggersASUS AI Suite II task properties - ActionsASUS AI Suite II task properties - Settings

PS:我特意选择向大家展示华硕AI Suite的任务属性,因为它其实是用Delphi制作的。

© www.soinside.com 2019 - 2024. All rights reserved.