C#: запустить команду с повышенными правами и захват вывода

Я хотел бы запустить команду с повышенными правами при захвате вывода:

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,

Любые возможные решения?

1 ответ

Это не точный ответ на ваш запрос, но покажет вам некоторые проблемы в вашем подходе и способ избежать всех.

Если ваша программа не работает с повышенными правами, каждый раз, когда вы вызываете внешнюю программу, она будет запрашивать повышенные привилегии для пользователя, поэтому в какой-то момент у пользователя будет запрошено повышение привилегий для программы.

Таким образом, вы можете запускать вашу программу с повышенными привилегиями, таким образом, когда вы запускаете внешнюю программу, она наследует повышенные привилегии.

Чтобы ваша программа запрашивала повышенные привилегии при запуске, прочитайте этот пост.

Другие вопросы по тегам