2009-10-19 4 views
3

J'ai un service .NET.Comment renvoyer une valeur d'une application de console à un service dans .NET?

J'ai une application console .NET.

Je veux quelque chose dans le sens du service en appelant Process.Start("consoleapp.exe") et obtenir des informations retournées par l'application, idéalement en renvoyant simplement un nombre.

Comment faire?

Edit:

Je figure qu'il doit être: Process.Start("myapp.exe").ExitCode - mais comment puis-je configurer le code de sortie dans l'application de la console?

+1

Pour définir le code de sortie de votre application de console, utilisez Environment.ExitCode; btw, pourquoi ne pas ajouter une référence à votre code de console dans votre application de service? Vous pouvez exécuter le code de la console sans compter sur la classe de processus –

+0

@Rubens - croyez-moi, je ne peux pas! – joshcomley

+0

@Rubens: Il existe des scénarios dans lesquels vous avez besoin d'une isolation de processus. –

Répondre

11
Process p = Process.Start("app.exe"); 
p.WaitForExit(); 
int number = p.ExitCode; 

Et app.exe vous définissez Enviroment.ExitCode ...

+0

Ahhh choses cruciales étant WaitForExit() et Environment.ExitCode! Je vais essayer maintenant, merci .. – joshcomley

0

L'application de console peut définir son code de sortie.

L'application de la console peut définir son code de sortie soit:

  1. Appel System.Environment.Exit(exitcode) ou
  2. Laissez la fonction main retourne un int.

La propriété ExitCode (de la classe System.Diagnostics.Process) permet le processus de service examiner le code de sortie de l'application de la console.

3

vous pouvez utiliser un code de sortie en changeant votre méthode principale de

public void Main(string[] args){return;} 

à

public int Main(string[] args){return 0;} 

Pas une solution élégante, mais il fonctionne.

+1

semble assez élégant. –

+0

Il est à un point. Je suppose que c'est parce que je ne suis pas un grand fan de compter sur des nombres arbitraires d'un code de sortie pour signifier quelque chose d'utile. Là encore je compte sur les codes de statut HTTP tout le temps ... –

1

Un nombre arbitraire peut être retourné par mécanisme standard ExitCode. Vous devez juste Start() un processus, puis WaitForExit(), puis obtenir la valeur de ExitCode.

1

Vous pouvez utiliser le code de sortie, qui peut être renvoyé à partir de la fonction Main ou défini via Environment.ExitCode. Une autre option consisterait à demander à ConsoleApp d'écrire dans le flux de sortie standard et de rediriger la sortie vers votre application principale. L'avantage de la deuxième option est que vous pouvez renvoyer plus de données qu'un seul nombre entier, si plus tard vous trouvez cela nécessaire. L'inconvénient est que c'est un peu plus de travail à installer.

Ce CodeProject article parcourt la redirection des flux de sortie standard d'un processus généré.

Questions connexes