Q:

Utilizar Linha de Comandos com C#

No meu trabalho eu uso o Linha de Comandos, e queria melhorar o trabalho na minha empresa. Para fazer isso, pensei em criar um programa em C# para as pessoas que não sabem trabalhar com linha de comando.
Pensei em colocar um botão para abrir um arquivo CNF, e com um outro botão (embutia o comando), e salvava em arquivo CSR no Desktop. 
Ou seja, o botão iria abrir o linha de comando e colocava a seguinte fórmula: 
cd desktop
openssl -req -new -config cert.cnf -out "cert.csr" out. 

Ou seja, o ficheiro myfile.csr estará no ambiente de trabalho, e através da linha de comandos, irá modificar para myfile.cnf.
Sugestões?

A:

Você quer fazer o mesmo procedimento do cmd dentro de um aplicativo escrito em c#? Se é isto, então você pode usar System.Diagnostics.Process.
Você terá que unir o comando cd com o openssl usando o &, veja um exemplo:
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();

//Oculta cmd
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

//Chama CMD
startInfo.FileName = "cmd.exe";

//seu comando
startInfo.Arguments = "/C cd Desktop& openssl \"myfile.csr\" -req -new -config myfile.cnf out.";

process.StartInfo = startInfo;
process.Start();

Para simplificar você pode passar os argumentos pelo Start(), conforme está resposta do SOen:
const string strCmdText = "/C cd Desktop& openssl \"myfile.csr\" -req -new -config myfile.cnf out.";
...
process.Start("CMD.exe", strCmdText);

A:

Segue uma variante do código postado pelo Guilherme Nascimento:
public void ExecutarComandoSSL(string arquivoCNF, string arquivoCSR) {
    using (System.Diagnostics.Process processo = new System.Diagnostics.Process()) {
        processo.StartInfo.FileName = Environment.GetEnvironmentVariable("comspec");
        processo.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        processo.StartInfo.Arguments = string.Format("/c openssl req -new -config {0} -out \"{1}\"", arquivoCNF, arquivoCSR);

        //processo.StartInfo.CreateNoWindow = true;
        processo.Start();
        processo.WaitForExit();
    }
}

Nota: O comando executará no diretório da área de trabalho do usuário atual. Informações.

Faça o seguinte, no formulário, coloque:

Dois botões, um para buscar o arquivo CNF, e outro para salvar no formato CSR.
Coloque um componente OpenFileDialog.

Crie uma classe para resgatar e guardar as informações sobre os arquivos:
public static class VariaveisGlobais 
{
    public static string CNF { get; set; }
    public static string CSR { get; set; }
}

No botão responsável por buscar o arquivo CNF, coloque:
DialogResult resposta = openFileDialog1.ShowDialog();
if (resposta == DialogResult.OK) {
     string arquivo = openFileDialog1.FileName;

     VariaveisGlobais.CNF = arquivo;
     VariaveisGlobais.CSR = "cert.csr"; // Leia a sugestão
}

Sugestão: Você pode utilizar o componente SaveFileDialog para permitir ao usuário salvar o arquivo no local de sua preferência.
No botão responsável por salvar o arquivo no formato CSR, coloque:
string arquivoCNF = VariaveisGlobais.CNF;
string arquivoCSR = VariaveisGlobais.CSR;

// Aqui você poderia tratar o conteúdo das variáveis
ExecutarComandoSSL(arquivoCNF, arquivoCSR);

