在运行时授予管理员权限

时间:2013-09-17 14:09:21

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

点击按钮后,我正在开展一个需要管理员权限的项目。 目前正在使用 C# VB.NET 。你的答案语言取决于你,但如果是在其中一种语言中则更好。 :)

我已经尝试了以下内容:

  • 使用新流程的“runas”动词,但问题是重新启动应用程序,这意味着丢失所有当前进度和变量值。
  • 修改清单文件,但我“不想强迫”用户以管理员身份运行该应用程序。

如前所述,仅在单击按钮时才需要管理员权限。如果从未点击过,则无需权限!

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

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

注意:我在 Microsoft Security Essential 中找到了类似于我需要的内容,它可以在不启动应用程序新实例的情况下授予管理员权限。

MSE can do it! 说明:运行 MSE 时,默认情况下,您会在历史记录标签中找到第一个单选框。 将此更改为任何其他选项并授予正确的 重新启动应用程序,维护当前状态

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:11)

在流程的生命周期内无法提升。在流程启动时确定流程是否运行升级。

  

我在Microsoft Security Essential中找到了类似于我需要的内容,它可以在不启动应用程序新实例的情况下授予管理员权限。

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

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