c#从UAC管理员级别进程降低权限启动进程

时间:2011-10-24 00:30:19

标签: c# admin uac privileges

我的应用程序存在一个主要问题。我有一个app& updater作为单独的exe文件。当更新可用时,更新程序会执行更新,并在进程完成时启动我的应用程序。主要问题是 - 应用程序安装在程序文件文件夹中,因此更新程序需要UAC管理员权限,这没关系,但是当我需要运行我的应用程序时,更新程序需要以普通用户身份运行它,因为如果它以管理员身份运行和drop不起作用(不是应用程序问题,UAC阻止它)。我尝试了几种不同的解决方案,甚至是这一种: How to run NOT elevated in Vista (.NET)

它没有帮助我 - 我的应用程序以管理员身份运行。

2 个答案:

答案 0 :(得分:9)

你最好避免从高架过程中启动非升级过程。这是一个棘手的部分,容易出错。

这种方法更好:

  1. 您的更新程序最初以非提升的应用程序启动,其清单的级别为asInvoker
  2. 启动时,它使用runas动词以提升的权限重新启动自身,并传递命令行参数以指示它。此实例执行更新并返回。
  3. 再次出现非提升的更新程序,并使用在步骤1中启动第一个更新程序实例的相同非提升用户令牌启动应用程序。
  4. 非常简单而且健壮。

答案 1 :(得分:0)

请看这篇关于如何为高架过程启用拖放的帖子。即使它说MFC应用程序你可以在我认为的任何应用程序中使用那些Windows API

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