C#应用程序中的管理员权限提示弹出窗口

8
我在我的应用程序中有一个需要管理员权限的功能。
我想要的是,当我点击执行该功能的按钮时,它应该要求输入管理员用户名和密码。(启动UAC对话框。同时在该按钮上显示图标。)
这是否可能?
PS:我知道通过修改清单文件以管理员权限启动应用程序。
此外,该功能是大型程序的一部分,无法转移到单独的程序中。

一旦完整的管理员访问权限被授予,您必须重新启动应用程序,以便您的应用程序能够利用新权限。这就是为什么@Rob建议您使用单独的应用程序的原因。我可以提供的最好建议是,如果确实需要,请在应用程序最初启动时请求完整的访问权限。 - user448374
我很感谢您的建议,但是我们的应用程序甚至可以由访客用户执行(这是一个要求),只有在某些时候我们才需要管理员权限。 - Raj
@Raj 我确定UAC不是那样工作的。祝你好运 :) - user448374
Windows 7/Vista如何显示一个按钮,点击后弹出UAC对话框? - Raj
1
@Raj,如果你观察任务管理器(例如),看一下它(TaskMgr.exe)在你第一次加载它时所具有的PID(进程ID),以及当你点击“显示所有用户的进程”按钮时所具有的PID。请注意,它会发生变化。这是因为它被重新启动并获得了适当的权限。 - Rob
2个回答

5

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

您可以使用“runas”动词在不更改程序清单的情况下以管理员权限运行程序(您还可以使用此方法重新启动具有管理员权限的程序):

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

有一个COM API可以让您在非管理员进程中创建具有管理员权限的COM对象,但我认为从.NET应用程序中使用这个API非常困难。


4
为了实现这一点,最好的方法是创建一个包含需要管理员权限的代码的辅助可执行文件,并进行适当的清单操作。当您的应用程序需要执行需要管理员权限的代码时,请调用该程序。
例如: MyProgram.exe - 没有清单 MyProgramElevated.exe - 具有指示需要管理员权限的清单
当 MyProgram.exe 需要以提升的身份执行操作时,它会执行 MyProgramElevated.exe,并传递命令行参数以指示所需的提升任务。

那是我想做的第一件事,但这个函数是一个大程序的一部分,不能转移到单独的程序中。 - Raj
1
@Raj,我不知道除了我建议的方法之外还有其他获取“完整”令牌的方式。我已经为您的问题添加了一些标签,希望能够使其更加明显,因为可能会有其他人知道我不知道的解决方案=) - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接