首页 > 解决方案 > 使用守护程序特权运行 Windows GUI 应用程序的最佳方式

问题描述

我正在开发一个 Windows 应用程序,它必须以特权(以管理员身份执行)执行其他 GUI 程序。

范围

方法

首先,我将我的应用程序开发为 Windows 服务。我认为这是运行具有特权的程序的最佳方式,但服务无法运行使用 GUI 会话的程序。

Microsoft 在 Windows Vista 中引入了此限制。Microsoft 的一篇文章 -会话 0 隔离对 Windows 中的服务和驱动程序的影响- 解释了这些更改。我试图更改运行我的服务的用户,但这种隔离似乎适用于所有服务。

目的

所以我的问题是“运行一个程序的最佳方法是什么,它将启动另一个具有特权提升的程序(以管理员身份执行)而无需用户采取任何行动?

目前,解决我的问题的唯一想法是将我的应用程序注册到任务计划程序中,但我认为它可能存在最好的方法。

标签: windowsservice

解决方案


Windows 服务未设计为在当前会话(用户会话)中进行交互。自部署 Windows Vista 以来,服务正在运行到会话 0。

可以在“ Session 0 Isolation 对 Windows 中的服务和驱动程序的影响”中找到有关此更改的说明。

我找到了另一篇 Microsoft 帖子“在 Windows Vista 及更高版本中从 Windows 服务启动交互式进程”,但我们可以在开头阅读:

你应该做的第一件事就是,不要这样做。它涉及许多限制、不良影响和限制。

对于这个用例,Windows 服务绝对是一个错误的解决方案。我能找到的唯一解决方案是Task Scheduler


推荐阅读