C# / .Net: 运行 CMD 以管理员身份使用提供的凭据

C# / .Net: Run CMD as admin with provided credentials

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

我在一家公司,我会写一些代码,让用户可以在他需要的时候运行使用这个软件。该软件需要管理员权限。例如,我写了一些代码以管理员身份启动 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();

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

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

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