windows - 使用守护程序特权运行 Windows GUI 应用程序的最佳方式
问题描述
我正在开发一个 Windows 应用程序,它必须以特权(以管理员身份执行)执行其他 GUI 程序。
范围
- 我的应用程序是一个“守护进程”,一个长时间运行的进程,无需用户操作即可启动;
- 我的应用程序必须以管理员身份执行(权限提升);
- 我的应用程序执行的进程必须以管理员身份执行,并且必须显示在屏幕上。
方法
首先,我将我的应用程序开发为 Windows 服务。我认为这是运行具有特权的程序的最佳方式,但服务无法运行使用 GUI 会话的程序。
Microsoft 在 Windows Vista 中引入了此限制。Microsoft 的一篇文章 -会话 0 隔离对 Windows 中的服务和驱动程序的影响- 解释了这些更改。我试图更改运行我的服务的用户,但这种隔离似乎适用于所有服务。
目的
所以我的问题是“运行一个程序的最佳方法是什么,它将启动另一个具有特权提升的程序(以管理员身份执行)而无需用户采取任何行动? ”
目前,解决我的问题的唯一想法是将我的应用程序注册到任务计划程序中,但我认为它可能存在最好的方法。
解决方案
Windows 服务未设计为在当前会话(用户会话)中进行交互。自部署 Windows Vista 以来,服务正在运行到会话 0。
可以在“ Session 0 Isolation 对 Windows 中的服务和驱动程序的影响”中找到有关此更改的说明。
我找到了另一篇 Microsoft 帖子“在 Windows Vista 及更高版本中从 Windows 服务启动交互式进程”,但我们可以在开头阅读:
你应该做的第一件事就是,不要这样做。它涉及许多限制、不良影响和限制。
对于这个用例,Windows 服务绝对是一个错误的解决方案。我能找到的唯一解决方案是Task Scheduler。
推荐阅读
- php - 访问网站时如何解决PHP安装丢失错误?
- angularjs - 从多维数组中获取一个对象并将其显示在下拉列表中 - AngularJS
- go - 为什么我们不能将切片或映射嵌入到 Go 结构中
- node.js - Mongoose Populate 如何不使用 ObjectIds 数组?
- python - 在 python 中使用正则表达式删除带有排除项的双引号
- mulesoft - anypoint studio http连接器中的所有接口0.0.0.0是什么?
- python - Python:基于数组的方程
- python - 如何阻止 Django Channels 杀死我长期运行的视图?
- javascript - Cheerio 访问 div 中的类
- html - 如何让 div 对齐并保持原状?