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();

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

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

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

最新更新