如何解决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,那么您可能必须禁用它,这在大多数情况下是不推荐的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。