Jump to content

Windows Forms para executar Command Line


luislopes

Recommended Posts

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

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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 😉

Link to comment
Share on other sites

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 😉

Link to comment
Share on other sites

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();
}
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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 😕

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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 ! 🙂

Link to comment
Share on other sites

É 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 !

Link to comment
Share on other sites

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.