【问题标题】:How to save admin password via GUI UAC Prompt?如何通过 GUI UAC 提示保存管理员密码?
【发布时间】: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 提示,这是设计使然。

标签: c# .net window uac runas


【解决方案1】:

正如 KooKiz 所说,您可以要求您的用户以管理员身份启动主进程,这样它就不再提示 UAC 它将运行的其他程序。

How to request administrator permissions when the program starts?

【讨论】:

  • 它可以工作,但问题是我无法以管理员权限启动我的应用程序(用户可能没有管理员权限,但他们应该能够使用我的应用程序)。仅在安装应用程序过程中询问管理员密码是可以接受的。
  • 一些应用程序使用辅助服务。服务安装需要管理员权限,并且可以设置为作为本地计算机运行(管理员的权限更高/相等)。你可以为自己运行一个服务,并要求他为你运行“xxx”作为提升。
猜你喜欢
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 2015-12-22
相关资源
最近更新 更多