2010-07-19 8 views
2

Je voudrais exécuter un programme dans le code côté serveur .NET.Exécution d'un programme par programme .NET

Jusqu'à présent, j'ai ceci:

Process p = new Process(); 
    p.StartInfo.FileName = "myProgram.exe"; 
    p.StartInfo.Arguments = " < parameter list here > "; 
    p.Start(); 
    p.Close(); 

Ceci est un programme de la console. Qu'est-ce qui se passe est que la console est ouverte et fermée à plusieurs reprises sans arrêt.

+1

où est la boucle? Vous pouvez démarrer le processus de manière asynchrone? – jdehaan

+2

En outre, vous avez oublié de poser une question. – driis

+2

Ce code ne peut provoquer une boucle à moins que votre programme ne s'appelle "myprogram.exe". –

Répondre

3

Vous voulez,

Process p = new Process(); 
    p.StartInfo.FileName = "myProgram.exe"; 
    p.StartInfo.Arguments = " < parameter list here > "; 
    p.Start(); 
    p.WaitForExit(); 

ce qui se passe dans votre code est de commencer à vous le processus et vous fermez tout de suite, ce que vous avez besoin est WaitForExit d'appel() qui attend réellement le processus de fermeture de son propre,

Pour imprimer la sortie avant l'application se ferme:

Process p = new Process(); 
p.StartInfo.FileName = "myProgram.exe"; 
p.StartInfo.Arguments = " < parameter list here > "; 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true; 
p.Start(); 
p.WaitForExit(); 
Console.WriteLine(p.StandardOutput.ReadToEnd()); 
+0

J'ai essayé et j'ai eu le même comportement. –

+0

Dans ce cas, je pense que l'application que vous essayez d'exécuter se termine par elle-même, essayez le code que j'ai ajouté à ma réponse pour obtenir la sortie avant la fermeture de la fenêtre. –

2

Consultez la classe BackgroundWorker. Voici un more detailed walkthrough/example de son utilisation.

+0

Je ne suis pas sûr si cela va aider. Il n'y a pas de calcul qui prend du temps. Ceci est un programme de console simple. Quand je l'exécute, la console est ouverte et fermée à plusieurs reprises sans s'arrêter. –

+0

@dev Essayez-le simplement –

+0

J'ai essayé cela. Dans la fonction DoWork, je crée et démarre un processus. La fonction RunWorkerCompleted n'est jamais appelée. Je suppose que cela a quelque chose à voir avec l'exécution d'un processus dans BackworkerProcess. Il n'y a aucune erreur ou exception jetée aussi loin que je vois. –

0

Ce code ne produira pas de boucle infinie. Il lancera un programme, puis fermera immédiatement le processus. (Vous pourriez ne pas vouloir le fermer, mais plutôt attendre que le processus se termine).

+0

Close() ne libère que des ressources, il ne termine pas le processus. –

+0

Ceci est un programme de console. Qu'est-ce qui se passe est que la console est ouverte et fermée à plusieurs reprises sans arrêt. –