【问题标题】:c# starting process with lowered privileges from UAC admin level processc# 从 UAC 管理员级别进程以降低的权限启动进程
【发布时间】:2011-12-13 19:03:55
【问题描述】:

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

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

【问题讨论】:

    标签: c# admin uac privileges


    【解决方案1】:

    您最好避免从提升的进程启动非提升的进程。这是棘手的部分并且容易出错。

    这种方法更好:

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

    相当简单和健壮。

    【讨论】:

    • +1;这个答案的第一行非常重要。我读过文章说,无论您尝试什么技术,尝试去提升(获取一个去提升的令牌来模拟)都是一个坏主意。不知道在哪里可以找到那个或那些文章,因为我在 Vista 刚问世时就读到了它。这个问题给出了另一个选项:stackoverflow.com/questions/1173630/…
    • 以这种方式制作 - 就像一个魅力!非常感谢我的朋友! ;)
    • @n1tr0 不客气。如果对您有帮助,请点赞并接受答案。 :)
    • @AlexeyIvanov 你能提供一个简单的示例代码吗?
    • @drizin 是的,您理解正确。非提升更新程序可以在根本不创建窗口的情况下工作。例如,如果提升的更新程序成功更新并返回 0 退出代码,则未提升的更新程序知道是时候启动应用程序了。否则,它就会退出。
    【解决方案2】:

    查看这篇文章,了解如何为提升的流程启用拖放功能。即使它说 MFC 应用程序,您也可以在我想的任何应用程序中调用那些 Windows API

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

    【讨论】:

      猜你喜欢
      • 2016-09-29
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2012-06-25
      • 1970-01-01
      相关资源
      最近更新 更多