【问题标题】:How to run command line with admin right in C# [duplicate]如何在 C# 中以管理员权限运行命令行 [重复]
【发布时间】:2017-08-22 09:30:30
【问题描述】:

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

【问题讨论】:

  • 认为您应该通过确保您的应用程序已提升 UAC 来提前解决这个问题,请参阅stackoverflow.com/questions/6412896/…
  • /user:Administrator 不是列出的 cmd 参数集.. 你确定你不是指 runas?
  • 谢谢@BugFinder,我在 StartInfo 中添加了“runas”,但没有帮助。
  • 首先不要调用cmd.exe...调用runas ....
  • runas 如所评论的那样可以解决问题,请在此处查看更多信息stackoverflow.com/questions/133379/…

标签: c# cmd admin-rights


【解决方案1】:

刚刚澄清了使用“runas”失败的原因。要在Verb 中使用“runas”,必须首先将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.");
    }

【讨论】:

  • 如果你不喜欢 UAC 弹出窗口,你必须disable it
猜你喜欢
  • 2019-10-15
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 2018-11-03
  • 2016-10-08
相关资源
最近更新 更多