如何在C#中使用admin权限运行命令行

时间:2017-08-22 09:30:31

标签: c# cmd admin-rights

我已经引用了一些其他主题,它出现了以下编码,但它不起作用。我允许它创建命令窗口并使用" / k"保持窗口打开的参数,以便我可以跟踪其输出。

但是,我可以从窗口看到命令需要管理员权限才能执行的警告。如何在管理员权限中执行它?

public void ClearArpCache () {
        ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe", "/user:Administrator \" cmd /k arp -d \""); // same as "netsh interface ip delete arpcache"
        processStartInfo.RedirectStandardOutput = true;
        //processStartInfo.CreateNoWindow = true;
        //processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        processStartInfo.UseShellExecute = false;
        processStartInfo.StandardOutputEncoding = Encoding.Default;
        processStartInfo.Verb = "runas";

        Process.Start (processStartInfo);
        UnityEngine.Debug.Log ("ARP table cache cleared.");
    }

编辑:

尝试更改" cmd.exe"到" runas.exe"

public void ClearArpCache () {
        ProcessStartInfo processStartInfo = new ProcessStartInfo("runas.exe", "/user:Administrator \" cmd /k arp -d \""); // same as "netsh interface ip delete arpcache"
        processStartInfo.RedirectStandardOutput = true;
        //processStartInfo.CreateNoWindow = true;
        //processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        processStartInfo.UseShellExecute = false;
        processStartInfo.StandardOutputEncoding = Encoding.Default;

        Process.Start (processStartInfo);
        UnityEngine.Debug.Log ("ARP table cache cleared.");
    }

1 个答案:

答案 0 :(得分:0)

刚刚澄清了为什么它没有使用" runas"。为了使用" runas"在Verb中,必须首先将UseShellExecute变为 true

执行以下功能时,会弹出一个窗口询问管理员权限,只需点击“是”'开始执行。虽然它超出了范围,但如果可能的话我也想跳过弹出窗口。

public void ClearArpCache () {
        ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe", "/k arp -d"); // same as "netsh interface ip delete arpcache"
        processStartInfo.CreateNoWindow = true;
        processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        processStartInfo.UseShellExecute = true;
        processStartInfo.Verb = "runas";

        Process.Start (processStartInfo);
        UnityEngine.Debug.Log ("ARP table cache cleared.");
    }