Execute C++ exe do formulário C# usando Process.start()
-
22-09-2019 - |
Pergunta
Estou tentando criar um aplicativo de formulário C# que me permitirá usar todos os meus programas C++ anteriores a partir de um programa central.
Consigo abrir os ex com Process.Start()
, porém não compila o código corretamente.
Código de exemplo:
Process.Start("C:\\\Documents and Settings\\\dan\\\Desktop\\\test.exe");
Isso abrirá o console e agirá como se estivesse em execução, mas não funciona como quando normalmente compilo a partir do editor C++.Tem alguma startinfo
variável que preciso definir para indicar que é um programa C++ ou algo nesse sentido?
Além disso, existe alguma maneira de executar um programa C++ usando process.start
isso me permitirá passar variáveis através da linha de comando via argc
e argv
?
Obrigado
Solução
Existem apenas algumas diferenças quando você usa Process.Start da maneira que você fez vs.quando você apenas executa o programa diretamente.Ambos podem ser resolvidos usando ProcessStartInfo.
- O Diretório de trabalho não será o mesmo.Defina isso como o caminho que contém o executável para obter o mesmo comportamento.
- Definir UseShellExecute como verdadeiro, então o shell do Windows é usado para executar o processo.
Quanto à adição de argumentos de linha de comando:Você pode fazer isso através ProcessStartInfo.Argumentos.No entanto, não deveria ser necessário por ser um aplicativo C++.
Outras dicas
Até agora, há apenas informações suficientes para responder à sua pergunta final.Sim, você pode incluir argumentos de linha de comando como mostrado aqui.Veja a seção intitulada "=== Programa que executa EXE (C#) ==="
Para adicionar argumentos de linha de comando:
Process process = new Process();
process.StartInfo.FileName = "C:\\Documents and Settings\\dan\\Desktop\\test.exe";
process.StartInfo.Arguments = ""; // Put your arguments here
process.Start();
Depois que o programa for compilado em um EXE, não importa em qual idioma ele foi escrito.
Quanto aos argumentos do programa, você precisa dar uma olhada na classe ProcessStartInfo e na substituição de Process.Start() que a utiliza: Process.Start(ProcessStartInfo)
Enfrentei um problema semelhante em python. Você espera uma saída detalhada?
No meu caso, o buffer de saída ficou cheio e, portanto, a execução foi interrompida.