Как запустить в C # CMD с правами администратора с паролем, а затем сохранить весь вывод в строку? - PullRequest
0 голосов
/ 19 ноября 2018

Я хотел бы запустить "runas / user: Administrator C: \ Info.bat" в CMD.Для пользователя-администратора требуется пароль («pass») .Когда я подтверждаю пароль, я получил данные, которые я хотел бы сохранить в строку.

Вот мой код:

        // admin password with secure string
        var pass = new SecureString();
        pass.AppendChar('p');
        pass.AppendChar('a');
        pass.AppendChar('s');
        pass.AppendChar('s');

        Process p = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo("CMD");
        startInfo.Verb = "runas";

        //go to user -> Administrator and then to file C:\\Info.bat (not working)
        startInfo.Arguments = "/user:Administrator C:\\Info.bat";
        startInfo.Password = pass;
        startInfo.UseShellExecute = false;
        p.StartInfo = startInfo;

        // save all output data to string
        p.Start();

Почему второй аргумент не работает для , запустите C:\ Info.bat ?

Как мне сохранить весь выводимый текст cmd в строку ?

Спасибо за помощь.

1 Ответ

0 голосов
/ 19 ноября 2018

Вам нужно изменить аргумент процесса, как показано ниже

startInfo.Arguments = "/user:Administrator \"cmd /K C:\\Info.bat\"";

/ K аргумент, который говорит CMD.exe открыться, выполнить указанную команду, а затем оставить окно открытым.

Вы также можете использовать.

/ C аргумент, который говорит CMD.exe открыться, запустить указанную команду, а затем закрыть, когда это будет сделано.

Edit:

Здесь вы можете прочитать вывод файла info.bat в строковую переменную.

var pass = new SecureString();
pass.AppendChar('p');
pass.AppendChar('a');
pass.AppendChar('s');
pass.AppendChar('s');

Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo("CMD");
startInfo.Verb = "runas";

startInfo.Arguments = "/user:Administrator \"cmd /C  C:\\info.bat\"";
startInfo.Password = pass;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;   
p.StartInfo = startInfo;

p.Start();

string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...