Возврат строки из консольного приложения
Что я действительно хочу сделать, это
static string Main(string[] args)
но это не сработает, вашими опциями являются void
и int
. Итак, Каковы некоторые другие способы вернуть строку, которая мне нужна, чтобы вернуться к вызывающему приложению?
Фон
Мне нужно написать консольное приложение, специально предназначенное для вызова из другого приложения
Process.Start("MyCode.exe -Option 12aaa1234");
Как эта вызывающая программа может получить строку, возвращаемую из этого исполняемого файла?
Исследование
Из того, что я могу сказать, на данный момент мой единственный вариант заключается в том, чтобы вызывающее приложение подключало поток прослушивания к потоку стандартного вывода процесса перед его запуском и отправляло "возврат" с помощью Console.Out. Пишите из моего исполняемого файла. Это на самом деле единственный способ сделать это, или есть что-то другое/лучшее, что я могу использовать?
Ответы
Ответ 1
Действительно ли это единственный способ сделать это, или есть что-то другое/лучшее, что я могу использовать?
Это не единственный способ сделать это, но он является наиболее распространенным.
Другие варианты включают в себя некоторую форму межпроцессного общения, что, скорее всего, будет значительно большим количеством усилий для разработки для одной строки.
Обратите внимание, что если вызывающее приложение является .NET-приложением, и, у вас есть контроль над обоими приложениями, может возникнуть смысл просто написать библиотеку классов вместо консольного приложения. Это позволит вам полностью разделить код, но имеет исполняемый "вызов" в вашу библиотеку, чтобы получить строковые данные.
Ответ 2
Идея 1:
Используя MyCode.exe, создайте зашифрованный текстовый файл, который сохраняется в указанном пути, который затем может быть расшифрован в текущем приложении и прочитан.
В приложении: "MyCode.exe", добавьте этот код:
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;
}
В приложении, которое вы сейчас делаете:
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;
}
Идея 2:
Используйте TCP для загрузки строки в порт, например. LocalHost (127.0.0.1), а затем получите строку в приложении, которое вы разрабатываете, используя прослушиватель TCP
Статья о TCP - http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx
Надеюсь, что это поможет:)
EDIT:
Посмотрите также на Сокеты: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx