Restituzione di una stringa da un’applicazione console

Quello che voglio davvero fare è questo

static string Main(string[] args) 

ma questo non funziona, le tue uniche opzioni sono void e int . Quindi, quali sono alcuni modi diversi per restituire la stringa di cui ho bisogno per tornare all’applicazione chiamante?

sfondo

Devo scrivere un’app per console specificamente progettata per essere chiamata da un’altra applicazione

 Process.Start("MyCode.exe -Option 12aaa1234"); 

Come può questo programma chiamante ricevere una stringa restituita da quell’eseguibile?

Ricerca

Da quello che posso dire, in questo momento la mia unica opzione è avere l’applicazione chiamante colbind un stream di ascolto al stream di output standard del processo prima di avviarlo, e inviare il “ritorno” usando Console.Out.Write dall’interno il mio eseguibile È questo in effetti l’UNICO modo per farlo, o c’è qualcosa di diverso / migliore che posso usare?

È questo in effetti l’UNICO modo per farlo, o c’è qualcosa di diverso / migliore che posso usare?

Questo non è l’ unico modo per farlo, ma è il più comune.

Le altre opzioni implicherebbero una qualche forma di comunicazione tra processi , il che probabilmente comporterebbe uno sforzo di sviluppo significativamente maggiore per una singola stringa.

Si noti che, se l’applicazione chiamante è un’applicazione .NET e si ha il controllo su entrambe le applicazioni, potrebbe essere più sensato scrivere semplicemente una libreria di classi invece di un’applicazione di console. Ciò ti consentirebbe di mantenere il codice completamente separato, ma di avere l’eseguibile “call into” nella tua libreria per ottenere i dati della stringa.

Idea 1:

Utilizzando MyCode.exe, creare un file di testo crittografato, che viene salvato in un percorso specificato, che può quindi essere decodificato nell’app corrente e letto.

Nell’app: “MyCode.exe”, aggiungi questo codice:

 public void ReturnToOther() { string ToReturn = "MyString"; System.IO.File.WriteAllText("Path", Encrypt(ToReturn)); } public String Encrypt(string ToEncrypt) { string Encrypted = null char[] Array = ToEncrypt.ToCharArray(); for (int i = 0; i < Array.Length; i++) { Encrypted += Convert.ToString(Convert.ToChar(Convert.ToInt32(Array[i]) + 15)); } return Encrypted; } 

Nell'app che stai creando ora:

 public void GetString() { string STR = Decrypt(System.IO.File.ReadAllText("Path")); Console.WriteLine("The string is: {0}", STR); } // If you want to keep this running before the file exists, use this: /* public void GetString() { for(int i = 0; i > -1; ++i) { if(System.IO.File.Exists("Path")) { string STR = Decrypt(System.IO.File.ReadAllText("Path")); Console.WriteLine("The string is: {0}", STR); break; } else { //Do something if you want } } } */ public String Decrypt(string ToDecrypt) { string Decrypted = null char[] Array = ToDecrypt.ToCharArray(); for (int i = 0; i < Array.Length; i++) { Decrypted += Convert.ToString(Convert.ToChar(Convert.ToInt32(Array[i]) - 15)); } return Decrypted; } 

Idea 2:

Usa TCP per caricare la stringa su una porta, ad esempio LocalHost (127.0.0.1), e quindi ricevi la stringa sull'app che stai sviluppando, usando un listener TCP

Un articolo su TCP - http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx

Spero che questo ti aiuti 🙂

MODIFICARE:

Dai un'occhiata anche a Sockets: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx