如何强制用户在WinForms中的用户管理员帐户

时间:2010-04-21 04:00:25

标签: c# .net windows winforms windows-7

我有简单的WinForms应用程序,其中修改Windows注册表。问题是在Vista / Windows 7中我需要强制用户切换到管理员。

我不想强制用户以管理员身份运行表单启动应用程序。当有必要写入注册表时,我希望他这样做。

最好的情况是,当用户需要“切换”到管理员,因此没有必要以管理员身份运行表格时,显示出很多设置中显示的相同信息。

我如何在.Net中实现这一目标?

3 个答案:

答案 0 :(得分:4)

如果应用程序有时不执行注册表操作,有时会执行分区。分区的三个键是(1)在第二个exe上有一个清单,如Ho所说,(2)在按钮/菜单项上放置一个盾牌,以便用户期望提升,(3)使用ShellExecute启动它(之前)调用Start,将UseShellExecuteFlag设置为true,以便使用清单。

然而,在分解你的应用程序之前,我会问两个问题。首先,它是用于非管理目的还是每个用户总是“点击该按钮”并需要提升?如果是这样,那么只需在应用程序上放置一个管理员清单,不要对其进行分区。其次,你确定需要写入注册表的那一部分吗?你能把你的钥匙转移到HKCU下吗?如果可以,那么你不再需要提升,每个人都更快乐。我总是首先考虑这些可能性,因为它们意味着更少的代码和更少的测试而不是分区。

答案 1 :(得分:2)

正如Aaronaught所说,我认为一个过程不可能要求提升自己。解决这个问题的一种方法是将流程拆分为两个应用程序,一个是执行大部分工作的常规应用程序,另一个是仅执行注册表写入的应用程序,而另一个应用程序具有包含类似

的清单
<requestedExecutionLevel level="requireAdministrator"/>

答案 2 :(得分:1)

据我所知,没有用于提升流程的API。当进程尝试以提升模式启动另一个进程时,它会自动发生。

这也适用于Windows Installer。我不确定它是从字面上开始另一个提升的进程还是只创建一个提升的COM对象,但它实际上是相同的。

我个人不会诉诸这种hackish解决方法来提升你的执行过程;如果你的进程可能需要提升,那么使用清单明确表示,并在启动时弹出同意消息。但是如果你绝对必须这样做,那就是这样 - 你需要在应用程序中启动一个提升的流程。

相关问题