【问题标题】:C#: run command with elevated permissions and capture outputC#:以提升的权限运行命令并捕获输出
【发布时间】:2017-06-12 13:18:11
【问题描述】:

我想在捕获输出时以提升的权限运行命令:

using System.Diagnostics;
namespace SO
{
    class Program
    {
        static void Main(string[] args)
        {

            ProcessStartInfo startInfo  = new ProcessStartInfo("FSUTIL", "dirty query c:");
            startInfo.RedirectStandardOutput = true;
            startInfo.UseShellExecute = false;
            startInfo.CreateNoWindow = true;
            startInfo.Verb = "runas";

            var proc = new Process();
            proc.StartInfo = startInfo;
            proc.Start();
            proc.WaitForExit();
            string output = proc.StandardOutput.ReadToEnd();
            System.Console.WriteLine(output);
        }
    }
}

问题是startInfo.Verb = "runas"; 需要startInfo.UseShellExecute = true;,与RedirectStandardOutpu 不兼容。

任何可能的解决方案?

【问题讨论】:

    标签: c# process elevated-privileges elevation privilege-elevation


    【解决方案1】:

    这不是对您要求的确切答案,但会向您展示您的方法中的一些问题以及避免所有问题的方法。

    如果您的程序没有以提升的方式运行,则每次调用外部程序时,它都会向用户请求提升的权限,因此在某些时候会请求用户提升程序的权限。

    也就是说,您可以使用提升的权限运行您的程序,这样当您启动外部程序时,它将继承提升的权限。

    让你的程序在运行读取this post.时请求提升权限

    【讨论】:

    • 当我设置 时,应用程序会在单独的控制台中打开。所以我仍然无法赶上标准输出。我想窃取提升控制台的输出并将其复制到原始控制台中。
    • 删除“runas”动词并确保将 UseShellExecute 设置为 false。
    • 完成无济于事。我认为提升的控制台应用程序在不同的控制台中打开是正常的。关键是在新提升的控制台中捕获输出并将其发送到原始控制台。
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多