从未以管理员身份运行的应用程序中,我有以下代码:
ProcessStartInfo proc = new ProcessStartInfo();
proc.WindowStyle = ProcessWindowStyle.Normal;
proc.FileName = myExePath;
proc.CreateNoWindow = false;
proc.UseShellExecute = false;
proc.Verb = "runas";
当我调用Process.Start(proc)时,我没有弹出请求以管理员身份运行的权限,并且exe不以管理员身份运行。
我尝试将app.manifest添加到myExePath中找到的可执行文件,并将requestedExecutionLevel更新为
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
使用更新的app.manifest,在Process.Start(proc)调用中,我得到一个异常,“请求的操作需要提升。”
为什么.Verb操作没有设置管理员权限?
我正在测试Windows Server 2008 R2 Standard。
答案 0 :(得分:49)
您 必须 使用ShellExecute
。 ShellExecute是唯一知道如何启动Consent.exe
以提升的API。
在C#中,您拨打ShellExecute
的方式是使用Process.Start
和UseShellExecute = true
:
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
info.UseShellExecute = true;
info.Verb = "runas";
Process.Start(info);
}
如果您想成为一名优秀的开发人员,可以在用户点击否时抓住:
private void button1_Click(object sender, EventArgs e)
{
const int ERROR_CANCELLED = 1223; //The operation was canceled by the user.
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
info.UseShellExecute = true;
info.Verb = "runas";
try
{
Process.Start(info);
}
catch (Win32Exception ex)
{
if (ex.NativeErrorCode == ERROR_CANCELLED)
MessageBox.Show("Why you no select Yes?");
else
throw;
}
}
CreateProcess
无法进行提升,只创建了一个进程。 ShellExecute
是知道如何启动Consent.exe的人,而Consent.exe是检查组策略选项的人。注意:任何已发布到公共领域的代码。无需归属。