C#运行时提升应用程序权限
我已经尝试了Stackoverflow.com中描述的所有可能的解决方案,但我无法使应用程序以管理员身份运行或提示管理员权限 我试过:C#运行时提升应用程序权限,c#,xml,user-permissions,C#,Xml,User Permissions,我已经尝试了Stackoverflow.com中描述的所有可能的解决方案,但我无法使应用程序以管理员身份运行或提示管理员权限 我试过: 使用runAs=“requireAdministrator”创建清单 手动设置“动词='runAs'” 但每个实例只调用另一个没有权限的实例,它只是一路循环( 这个项目很简单,我找不到哪里出了问题 你能这么温柔地帮我吗 谢谢 编辑:循环行为发生在Windows 7中。在Windows XP中,它请求权限,甚至键入有效的用户/密码似乎都失败。它不会循环,但只调
- 使用runAs=“requireAdministrator”创建清单
- 手动设置“动词='runAs'”
我的舱单
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
您在ProcessStartInfo中指定了“runas”动词。“runas”显示为“以管理员身份运行”。它可用于管理员帐户。对于普通用户配置文件,只有“runasuser”可用,shell将打开登录对话框以输入管理员帐户名和密码
您可以在HKEY_CLASSES\u ROOT\exefile\shell中检查.exe文件的动词是否确实启用了UAC?如果您不启用UAC并以非管理员身份运行它,它将正常运行而不请求提升。这可以解释您看到的循环。@chickenpie是的,UAC已启用。这可以解释Windows XP中的行为,因为它尚未启用UAC。我有相同的清单,但没有applicationRequestMinimum部分,它可以正常工作。您能再次检查清单文件是否在项目属性中的“应用程序”选项卡下指定吗?@chickenpie是的,它是。清单是沿着Exe部署的。它可以工作,但只有一种情况(请参阅我上面的编辑).如果你能帮助我,我可以把整个项目寄给你。:-)
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... :(");
}
}
}
}