【问题标题】:Granting Administrator Rights During Run-Time在运行时授予管理员权限
【发布时间】:2013-09-22 00:44:59
【问题描述】:

我正在处理一个在单击按钮后需要管理员权限的项目。 目前使用 C#VB.NET。您的回答语言取决于您,但如果使用其中一种语言会更好。 :)

我已经尝试了以下方法:

  • 带有新进程的“runas”动词,但问题是它会重新启动应用程序,这意味着丢失所有当前进度和变量值。
  • 正在编辑清单文件,但我“不想强制”用户以管理员身份运行应用程序。

如前所述,只有在单击按钮时才需要管理员权限。如果它从未被点击过,则不需要任何权限!

那么,无论如何,是否可以通过 UAC 来在运行时授予管理员权限。无需重新启动应用程序。

我在网上搜索过,我得到的只是上面已经提到的方法:)

注意:我在 Microsoft Security Essential 中发现了类似于我需要的东西,它能够授予管理员权限,而无需启动应用程序的新实例。

说明:在运行MSE时,默认情况下,您会在History标签中找到first strong> 选择单选框。 将此更改为任何其他选项并授予权限不会因此重新启动应用程序,维护当前状态

非常感谢任何帮助。

【问题讨论】:

  • afaik:您无法提升正在运行的进程。如果您的应用程序“有时”要求管理员权限,然后在不关闭的情况下执行某些操作,则该应用程序通常只是在后台生成一个具有管理员权限的新进程(以执行特定任务)。
  • 谢谢,有没有办法判断一个应用是启动了一个新进程还是暂时提升它自己。

标签: c# vb.net security uac elevated-privileges


【解决方案1】:

在进程的生命周期内无法提升。您的进程是否运行提升在进程启动时决定。

我在 Microsoft Security Essential 中发现了类似于我需要的东西,它无需启动应用程序的新实例即可授予管理员权限。

不,MSE 将在单独的进程中执行提升的任务。

您无需关闭现有流程并启动新流程。您需要做的是使用单独的流程来执行需要提升的任务。该单独的过程不需要显示任何 UI。提升的进程可以保持隐藏状态并与显示 UI 的进程通信。实现此目的最简洁的方法是将提升的任务放在进程外 COM 服务器中并使用CoCreateInstanceAsAdmin

【讨论】:

  • +1 嗯,这很有趣;这是否可能意味着非提升应用程序可以与 MSE 通信并使其显示这些管理设置?无论如何,这些设置很可能会通过提升的过程再次保留,即使你设法让它显示它们。
  • @Groo 我不明白这个问题
  • 抱歉,我没有彻底检查 OP 的示例。我以为他是在说 MSE 要求提升权限,然后根据隐藏的提升进程的操作显示一个附加选项卡或其他内容。换句话说,提升的进程可以保持隐藏并与显示UI的[非提升]进程通信的部分让我认为需要特权的功能实际上可能存在于非-elevated 进程,并且仅由后台进程启用。
  • @DavidHeffernan 谢谢你的提示!我发现了一篇不错的文章here,但对于 C++ :)
猜你喜欢
  • 2015-06-19
  • 2020-09-04
  • 2020-12-11
  • 1970-01-01
  • 2012-07-12
  • 2018-11-12
  • 1970-01-01
  • 2015-11-14
  • 2019-09-17
相关资源
最近更新 更多