【发布时间】:2015-02-18 10:50:23
【问题描述】:
我的 C# WinForm 应用程序运行另一个具有管理员权限的“devcon.exe”控制台应用程序:
var startInfo = new ProcessStartInfo
{
FileName = fileName, // filename C:\....\devcon.exe
WindowStyle = ProcessWindowStyle.Hidden, // we don't want to see devcon.exe window
Arguments = "restart " + deviceID, // some arguments for devcon.exe console application
Verb = "runas" // run as administrator
};
Process.Start(startInfo).WaitForExit();
因此,每次启动 devcon.exe 时都会显示 GUI UAC 提示符。
但用户不希望每次都看到 GUI UAC 提示。在第一次启动 devcon.exe 时只显示一次 GUI UAC 提示符是可以接受的
带有/savecred 的runas.exe 可以帮助保存管理员密码,并且在第一次启动devcon.exe 时只询问一次:
Process.Start("cmd.exe", @"/C runas.exe /savecred /user:" + "admin" + " " + "\"C:\...\devcon.exe 重启" +设备ID + "\"");
但在这种情况下会显示控制台提示(它要求输入管理员密码)。
用户不想看到控制台提示,他们想看到 GUI UAC 提示。在这种情况下,如何显示 GUI UAC 提示而不是控制台提示?如果 runas.exe 无法使用 /savecred,我如何保存管理员密码以便在第一次启动 devcon.exe 时只询问一次?
附:我不知道管理员密码,请用户自己输入。
【问题讨论】:
-
一种方法是使用管理员权限启动您的 WinForm 应用程序。这样,它可以在不产生 UAC 提示的情况下以管理员权限启动其他进程
-
您无法绕过 UAC 提示,这是设计使然。