Jump to content

Windows Forms para executar Command Line


Recommended Posts

Posted

Boas,

Tenho muito pouca experiência com C# e ainda menos com Windows Forms, mas preciso de criar uma aplicação com alguns botões, sendo que ao clicar em cada um dos botões, o mesmo executa um comando na linha de comandos (para executar um target do Phing).

Para além disto, preciso de alterar constantemente o caminho para certas pastas (gostaria de o fazer também na aplicação).

Alguém conhece um projeto semelhante para eu me basear ?

Obrigado

Posted

Boas,

para executares comandos podes usar o Process.Start. Podes ver um exemplo aqui:

http://msdn.microsoft.com/en-us/library/53ezey2s.aspx

(tens de fazer o using do System.Diagnostics)

Não percebi isso de alterar constantemente o caminho de certas pastas, mas se for para renomear pastas, podes usar o Directory.Move

http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx

(tens de fazer o using do System.IO)

Posted

Obrigado pela resposta nelsonr 🙂

Eu já andei a tentar meter o Process.Start a dar, mas não consigo ...

Basicamente o máximo que consegui fazer foi o mesmo que é feito neste

https://www.youtube.com/embed/7kzsTf9qPv4?feature=oembed

, cujo código é este:

Process update = new Process();
	 update.StartInfo.FileName = "cmd.exe";
	 update.StartInfo.UseShellExecute = true;
	 update.StartInfo.Arguments = "dir";
	 update.StartInfo.RedirectStandardOutput = true;
	 update.Start();
	 textBox1.Text = update.StandardOutput.ReadToEnd();
	 */

No

update.StartInfo.Arguments = "dir";

se alterar "dir" por "ipconfig" também funciona, porém se quiser fazer um cd para uma certa directoria, não consigo ! e no meu caso preciso de fazer

cd C:\wamp\bin\php\php5.4.3

Pois só nesta pasta é que posso executar o script que quero que seja executado quando clico no botão.

Em relação ao caminho das pastas, o tal ficheiro de script contém vários caminhos para diversas pastas, o objectivo é mudar esses caminhos na aplicação e os caminhos serem alterados no script (mas isso fica para depois).

Acho que fui um bocado confuso, qualquer dúvida avisem e obrigado pela ajuda 😉

Posted

Qual o comando que pretendes executar mesmo?

Não dá para executares o que pretendes directamente, definindo a directoria de trabalho.

Exemplo:

var startInfo = new ProcessStartInfo("commando.exe");
startInfo.WorkingDirectory = @"C:\Pasta";
Process proc = Process.Start(startInfo);
Posted

Eu tenho um buildfile do Phing que executa algumas tarefas de Deploy, o objectivo é criar a aplicação para não ter de ir sempre à linha de comandos executar o script.

Na linha de comandos eu faço:

cd C:\wamp\bin\php\php5.4.3
phing

e ele executa o script.

Experimentei o que disseste desta maneira:

var startInfo = new ProcessStartInfo("phing");
	    startInfo.WorkingDirectory = @"C:\wamp\bin\php\php5.4.3";
	    Process proc = Process.Start(startInfo);

E funciona, ele abre a janela do cmd e vejo que executou (mas ela fecha logo imediatamente).

o que agora pretendia era ter o output do comando numa textbox, ou seja, queria que tudo o que aparece na linha de comandos aparece na textybox da minha aplicação . tentei desta maneira mas não deu

textBox1.Text = proc.StandardOutput.ReadToEnd();

Mas já foi um passo dado, obrigado nelson 😉

Posted

Experimenta algo assim:

Process process = new Process();
process.StartInfo = new ProcessStartInfo(@"C:\wamp\bin\php\php5.4.3\phing.exe")
{
WorkingDirectory = @"C:\wamp\bin\php\php5.4.3",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
};
process.Start();
using (StreamReader sr = process.StandardOutput)
{
textBox1.Text = sr.ReadToEnd();
}
Posted (edited)

Não.. assim lança logo uma excepção...Testei também meter no ProcessStartInfo "phing", meti o CreateNoWindow a false e ele nem está a executar o comando (a janela do cmd nem aparece)...

Na outra versão ao menos sempre executa, não me direciona é o output para a textbox e dá uma excepção a dizer "StandardOut has not been redirected or the process wasn't started yet" 😕

Mas com a versão inicial que falei, aquela para fazer "dir" ele encaminha o output para a textbox ...

Edited by luislopes
Posted

Com esse exemplo não é suposto mostrar a janela de output,porque está a ser direccionada para o streamreader.

Quando se coloca a trabalhar desta forma, tem de se definir o caminho da aplicação com o nome do ficheiro a executar.

Qual é a excepção que dá?

Posted

Ao executar como disseste diz "The system cannot find the file specified" e a excepção é lançada no process.Start();

Mas este código tem de estar no minimo incompleto, porque para o script do Phing ser executado eu tenho de escrever "phing" na pasta "C:\wamp\bin\php\php5.4.3" e nesse código não tenho "phing" em lado nenhum 😕

Posted

Outro problema que verifiquei agora... O meu script do Phing tem várias tasks, para as chamar faço "phing nometask", sendo que se fizer apenas "phing" irá ser executada a task predefinida.

com o código de à pouco

  var startInfo = new ProcessStartInfo("phing");
	    startInfo.WorkingDirectory = @"C:\wamp\bin\php\php5.4.3";
	    Process proc = Process.Start(startInfo);

ele abre a janela do cmd e vejo que executou a tarefa do phing predefinida (que apenas mostra todas as tarefas possiveis), se por outro lado em vez de "phing" meter "phing commit" (tarefa para fazer commit) da-me a excepção "The system cannot find the file specified"

Posted (edited)

Testei aqui com um batchfile que contem apenas o dir, e funcionou bem

Podes definir os parametros com a variavel "Arguments" (colocas juntamente na parte onde está a ser definido o workingdirectory)

Edited by nelsonr
Posted

Eim? Então está no parametro do ProcessStartInfo o caminho completo, incluindo o ficheiro a executar.

Mas to objectivo não é abrir o .exe do Phing, é executar um ficheiro xml com algumas tarefas(feitas em Phing).

Para o fazer na linha de comandos tenho de estar dentro da pasta do php (O phing só é executado nesta pasta) e ao escrever phing ele executa o ficheiro build.xml (que é o ficheiro que contém as tarefas que escrevi)

Ok !

Fiz o que disseste agora, como queria executar "phing commit", meti no ProcessStartInfo "phing" e nos Arguments "commit" e está a dar 😁 Muito Obrigado !

Agora só faltava mesmo passar o output para a textbox (porque depois tudo o que tenho de fazer é repetir este código)

Posted

O Phing é um programa que permite automatizar processos.

Basicamente depois do Phing estar instalado, escreves um fichero .xml com as tarefas que o Phing tem (o nome predefinido do ficheiro é build.xml), ou seja quando executas "phing" o que ele faz é executar o ficheiro build.xml.

O que ficou agora feito já executa o que é pretendido, agora só queria encaminhar o output para a textbox.

Estou em estágio, pelo que só amanha é que volto a testar isto.

Agradeço-te imenso a ajuda, mesmo ! 🙂

Posted

É um batch file que pode estar em qualquer pasta, mas que tem de ser executado através da pasta C:\wamp\bin\php\php5.4.3.

Se o ficheiro estiver nessa pasta e se chamar "build.xml" executo apenas "phing" senão executo "phing -f caminho_ficheiro" (já testei com vários caminhos e está a funcionar) 🙂

Vou ver se encontro algo que me ajude a meter o output da consola na textbox.

Mas mais uma vez, obrigado !

Posted

Se é um batch file, o exemplo que dei no post #6 tem de funcionar, apenas substitui o nome do ficheiro "phing.exe" para "phing.bat".

E confirma que esse ficheiro está na pasta, sendo o caminho completo "C:\wamp\bin\php\php5.4.3\phing.bat"

Posted

Já agora, se quiseres usar o exemplo inicial, podes experimentar enviar o output usando o sinal >

Exemplo:

dir >output.txt

Talvez consigas fazer "phing >output.txt", depois lês o ficheiro para a textbox

Posted

O ficheiro "phing.bat" existe, quer faça como dizes quer meta só "phing" o resultado está a ser o mesmo ...

Ele abre o cmd vejo que executou, mas depois lança a excepção "StandardOut has not been redirected or the process hasn't started yet" e portanto não vai output nenhum para a textbox

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.