C#运行时提升App权限

我已经尝试过Stackoverflow.com中描述的所有可能的解决方案,但我无法以管理员身份运行应用程序或提示管理员权限。

我试过了:

  • 使用runAs =“requireAdministrator”创建清单
  • 手动设置“verb =’runAs’”

但是每个实例只调用另一个没有权限的实例,它只是一直循环。 🙁

该项目非常简单,我找不到有什么问题。

你会这么温柔地帮助我吗?!

谢谢!!!

编辑:循环行为发生在Windows 7中。在Windows XP中它要求许可,甚至键入有效的用户/密码似乎都失败了。 它不会循环,但只调用没有管理员权限的第一个实例。

编辑2:相同的代码在Windows 8中工作正常.Windows XP没有UAC,所以它不起作用。 问题仅在Windows 7中存在。

编辑3:经过多次尝试,我得出结论,如果用户设置了常用的“用户”配置文件(Windows中默认设置),则应用程序不会提示管理员访问。 这看起来很奇怪,如果有一个管理员配置文件,那么应用程序可以提示管理员访问?! :S


我的清单

           

代码…

 public partial class MainWindow : Window { public MainWindow() { Juca.raisePermissions(); InitializeComponent(); if (Juca.gotPower()) { lblBad.Visibility = Visibility.Hidden; lblGreat.Visibility = Visibility.Visible; } else { lblBad.Visibility = Visibility.Visible; lblGreat.Visibility = Visibility.Hidden; } } } class Juca { public static bool gotPower() { var IdentidadeWindows = WindowsIdentity.GetCurrent(); var IdentidadePrincipal = new WindowsPrincipal(IdentidadeWindows); return IdentidadePrincipal.IsInRole(WindowsBuiltInRole.Administrator); } public static void raisePermissions() { if (!gotPower()) { MessageBox.Show("I shall raise your permissions"); var processInfo = new ProcessStartInfo(Assembly.GetCallingAssembly().CodeBase); processInfo.UseShellExecute = true; processInfo.Verb = "runas"; try { Process.Start(processInfo); } catch (Win32Exception ex) { MessageBox.Show("Could not raise at all... :("); } } } } 

您在ProcessStartInfo中指定了“runas”动词。 “Runas”显示为“以管理员身份运行”。 它适用于管理员帐户。 对于常见的用户配置文件,只有“runasuser”可用,shell会打开一个登录对话框来输入管理员帐户名和密码。

您可以在HKEY_CLASSES_ROOT \ exefile \ shell中查看.exe文件的动词