【发布时间】:2020-08-05 20:59:29
【问题描述】:
我正在为 Windows 开发一个包含两个组件的程序:
- 内核驱动程序(使用 EV 证书签名)
- 用户级 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