Возврат строки из консольного приложения

Что я действительно хочу сделать, это

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