c#启动进程的权限低于UAC管理级进程

本文关键字:进程 UAC 管理 权限 启动 | 更新日期: 2023-09-27 18:12:15

我的应用程序有一个主要问题。更新作为一个单独的exe文件。当更新可用时,updater进行更新,并在进程完成时启动我的应用程序。主要问题是-应用程序安装在程序文件文件夹中,所以updater需要UAC管理权限,这很好,但是当我需要运行我的应用程序时,updater需要以正常用户的身份运行它,因为如果它以管理员的身份运行拖放不起作用(不是应用程序问题,UAC阻止它)。我尝试了几种不同的解决方案,甚至是这个:如何在Vista (.NET)中运行NOT - elevated

它没有帮助我-我的应用程序是作为管理员运行的

c#启动进程的权限低于UAC管理级进程

您最好避免从已提升的进程启动未提升的进程。这是一个棘手的部分,容易出错。

这个方法比较好:

  1. 您的更新程序最初作为非提升应用程序启动,并且其清单具有asInvoker级别。
  2. 当它启动时,它使用runas动词以提升的权限重新启动自己,并传递一个命令行参数来指示它。这个实例执行更新并返回。
  3. 这里又出现了未提升的更新程序,并使用在步骤1中启动第一个更新程序实例的相同的非提升用户令牌启动应用程序。

看看这篇关于如何为提升进程启用拖放功能的文章。尽管它说MFC应用你可以在任何应用中调用这些Windows API

https://helgeklein.com/blog/2010/03/how-to-enable-drag-and-drop-for-an-elevated-mfc-application-on-vistawindows-7/