首页 > 解决方案 > C# / .Net:使用提供的凭据以管理员身份运行 CMD

问题描述

我今天搜索了几个小时,但我只找到了不起作用的解决方案。也许这是不可能的,但让我们试一试:

我在一家公司,我将编写一些代码,以便用户可以在需要时运行该软件。该软件需要管理员权限。例如,我编写了一些代码以管理员身份启动 cmd 并在 c:/Windows 创建一个文件夹(您需要管理员权限)。管理员帐户的凭据是正确的(我们使用 Microsoft AD),但我只在 cmd 中得到“拒绝访问”。有谁知道是否可以使用硬编码凭据获得管理员权限?

注意:不要谈论安全风险,cmd不是目标软件但它应该证明问题。

我的代码:

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = @"/Kmkdir C:\Windows\_Test";
p.StartInfo.UserName = "admin";
System.Security.SecureString sPW = new System.Security.SecureString();
sPW.AppendChar('a');
sPW.AppendChar('b');
sPW.AppendChar('c');
p.StartInfo.Password = sPW;
p.StartInfo.UseShellExecute = false;
p.Start();

标签: c#active-directoryuser-permissions

解决方案


您仍然收到错误消息,因为较新的 Windows 版本(自 Vista 起)中的所有管理员帐户在技术上都是标准用户帐户。执行管理任务的方式是通过用户帐户控制 (UAC)。它允许您以管理员身份提升权限以执行管理任务。所以是的,您正在使用管理员帐户执行该过程,但您没有提升该过程。为此,请添加此参数:

p.StartInfo.Verb = "runas";
p.StartInfo.UseShellExecute = true;

您可以删除有关身份验证的所有其他参数,因为所有身份验证都由 UAC 处理。如果出于某种原因您不想使用 UAC,那么您可能必须禁用它,在大多数情况下不建议这样做。


推荐阅读