【问题标题】:Admin rights prompt popup in C# applicationC# 应用程序中的管理员权限提示弹出窗口
【发布时间】:2010-11-03 08:52:13
【问题描述】:

我的应用程序中有一个需要管理员权限的功能。

我想要的是当我单击按钮执行该功能时,它应该要求输入管理员用户名和密码。 (启动 UAC 对话框。同时在该按钮上显示图标。)

有可能吗?

PS:我知道通过修改清单文件以管理员权限启动应用程序。

此外,此功能是大型程序的一部分,不能转移到单独的程序中。

【问题讨论】:

  • 在授予完全管理员访问权限后,您必须重新启动您的应用程序,以便您的应用程序能够利用新权限。因此,为什么@Rob 建议您使用单独的应用程序。我能给出的最佳建议是,如果您确实需要,请在应用程序最初启动时请求完全访问权限。
  • 感谢您的建议,但我们的应用程序甚至可以由来宾用户执行(这是一项要求),只有有时我们需要管理员权限。
  • @Raj 我确定 UAC 不会那样工作。祝你好运:)
  • Window 7/ Vista 如何显示一个按钮,点击后会弹出 UAC 对话框?
  • @Raj,如果您观察任务管理器(例如),请查看它 (TaskMgr.exe) 在您第一次加载它时的 PID(进程 ID),而不是在您加载它时的 PID单击“显示所有用户的进程”按钮。请注意,它会发生变化。这是因为它以适当的权限重新启动。

标签: c# wpf c#-3.0 uac


【解决方案1】:

您可以使用 StockIcons.Shield 从Windows API Code Pack 获取图标

您可以使用“runas”动词以管理员权限运行程序,而无需更改程序清单(您也可以使用它以管理员权限重新启动您的程序):

Process.Start(new ProcessStartInfo()
   {
        Verb = "runas",
        FileName = "Notepad.exe",
   });

有一个 COM API 可让您在非管理员进程中创建具有管理员权限的 COM 对象,但我相信在 .net 应用程序中使用它非常困难。

【讨论】:

    【解决方案2】:

    实现这一点的最佳方法是拥有一个包含需要管理权限的代码的辅助可执行文件,该代码会适当地显示出来。当您的应用程序需要执行需要管理员权限的代码时,请调用该程序。

    例如:

    MyProgram.exe - 没有清单
    MyProgramElevated.exe - 有一个清单表明它需要管理员权限

    MyProgram.exe 需要执行提升后的操作时,它会执行MyProgramElevated.exe,传递命令行参数以指示需要提升的任务。

    【讨论】:

    • 这是我想做的第一件事,但是这个功能是一个大程序的一部分,它不能转移到一个单独的程序中。
    • @Raj,除了按照我的建议进行操作外,我不知道有任何方法可以获得“完整”令牌。我在您的问题中添加了更多标签,希望使其更明显,因为其他人可能知道我不知道的解决方案 =)
    猜你喜欢
    • 2016-06-05
    • 2014-05-30
    • 2010-11-27
    • 2013-07-20
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多