我有一个需要提升权限的应用程序(它类似于自定义安装程序)。 在此应用程序中,我使用ShellExecute()来显示PDF文件。 似乎Adobe Reader的启动权与调用应用程序相同。我希望Adobe Reader能够以标准用户权限启动而不是提升。
有什么方法可以做到吗? (它将在Delphi中,但对于这个问题,语言可能并不重要)。
答案 0 :(得分:0)
不幸的是,没有真正直接的方法。
您可以使用任务计划程序执行此操作的一种方法 - 使用ITaskService
界面安排任务立即运行,使用当前登录用户的非提升凭据。
答案 1 :(得分:0)
您想要实现的目标不能轻易完成,也不受支持。但是,可以使用少量的黑客攻击。 Aaron Margosis写了一篇描述一种技巧的article。
引用相关部分,您需要执行以下步骤:
- 在当前令牌中启用SeIncreaseQuotaPrivilege
- 获取代表桌面shell的HWND(GetShellWindow)
- 获取与该窗口关联的进程的进程ID(PID)(GetWindowThreadProcessId)
- 打开该流程(OpenProcess)
- 从该进程获取访问令牌(OpenProcessToken)
- 使用该令牌制作主令牌(DuplicateTokenEx)
- 使用该主令牌(CreateProcessWithTokenW)
启动新进程 醇>
本文包含一些演示C ++源代码的下载链接,从中可以很容易地转换为Delphi。