C # CMD — взаимодействие в командной строке

#c# #cmd #openssl

#c# #cmd #openssl

Вопрос:

Из-за постоянных требований к генерации самозаверяющих сертификатов я начал разрабатывать простую консольную программу, которая могла бы ускорить процесс. Требуется несколько аргументов, запустите процесс CMD и используйте openssl при генерации.

Одна из команд openssl вводит некоторые данные о различаемом имени, а другая — пароль CA. Для этих подсказок я пишу строку в потоке StandardInput с мыслью, что он также может отправлять нажатие клавиши Enter. В первом случае это, кажется, работает, но второе приглашение зависает и никогда не получает его. Как это решить?

Команда:

  openssl x509 -req -in {Domain}.csr -CA {PathCA} -CAkey {PathKeyCA} -CAcreateserial -out {Domain}.crt -days 825 -sha256 -extfile {Domain}.ext
  

Код:

  Process cmd = new Process();

 cmd.StartInfo.FileName = "cmd.exe";
 cmd.StartInfo.RedirectStandardInput = true;
 cmd.StartInfo.UseShellExecute = false;

 cmd.Start();

 using (StreamWriter sw = cmd.StandardInput) {

     if (sw.BaseStream.CanWrite) {
         foreach (Models.Command command in commands) {

             try {

                 if (!command.Prompt) {
                     // Command execution
                     sw.WriteLine(command.Descripcion);
                 } else {
                     // Input prompt
                     cmd.StandardInput.WriteLine(command.Descripcion);
                     cmd.StandardInput.Flush();
                 }
             } catch (Exception ex2) {


             }
         }
     }
 }
            
 cmd.Close();
  

Комментарии:

1. Обнаружено какое-либо исключение?

2. Нет, он просто записывает строку без отправки