#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. Нет, он просто записывает строку без отправки