1

我参考了其他一些主题,它出现了以下编码,但它不起作用。我允许它创建命令窗口并使用“/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.");
    }
4

1 回答 1

1

刚刚澄清了使用“runas”失败的原因。为了在 中使用“runas” VerbUseShellExecute必须首先变为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.");
    }
于 2017-08-22T12:15:53.210 回答