【问题标题】:C# / .Net: Run CMD as admin with provided credentialsC# / .Net:使用提供的凭据以管理员身份运行 CMD
【发布时间】:2023-03-18 11:25:01
【问题描述】:

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

我在一家公司,我将编写一些代码,以便用户可以在需要时运行该软件。该软件需要管理员权限。例如,我编写了一些代码以管理员身份启动 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-directory user-permissions


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。 “runas”的问题是用户必须知道管理员帐户的凭据。这就是我正在尝试解决的问题。
    • 这是可以理解的,在这种情况下,您有两个选择:为管理员帐户禁用 UAC,或使用默认禁用 UAC 的内置管理员帐户。然后,您可以在内置管理员帐户下运行一个进程,该帐户将具有真正的管理权限。但是,请注意,在这两种情况下,理论上您都会降低系统的安全性。
    • 感谢您的帮助,我会将您的答案标记为解决方案,因为您给了我两个选项,我的理解/搜索确认没有其他方法可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2015-09-04
    • 2011-12-29
    • 2019-04-14
    • 2012-03-19
    • 2017-05-18
    相关资源
    最近更新 更多