19

我真正想做的是这个

static string Main(string[] args)

但这不起作用,您唯一的选择是voidand int。那么,有哪些不同的方法可以返回我需要返回给调用应用程序的字符串?

背景

我需要编写一个专门设计为从另一个应用程序调用的控制台应用程序

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

这个调用程序如何接收从该可执行文件返回的字符串?

研究

据我所知,此时我唯一的选择是让调用应用程序在启动之前将侦听流附加到进程的标准输出流,并使用 Console.Out.Write 从内部发送“返回”我的可执行文件。这实际上是做到这一点的唯一方法,还是我可以使用不同/更好的方法?

4

2 回答 2

16

这实际上是做到这一点的唯一方法,还是我可以使用不同/更好的方法?

这不是唯一的方法,但它是最常见的。

其他选项将涉及某种形式的进程间通信,这可能会显着增加单个字符串的开发工作量。

请注意,如果调用应用程序是 .NET 应用程序,并且您可以控制这两个应用程序,那么编写类库而不是控制台应用程序可能更有意义。这将允许您将代码完全分开,但让可执行文件“调用”您的库以获取字符串数据。

于 2013-11-04T18:09:09.577 回答
3

想法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

希望这可以帮助 :)

编辑:

也看看套接字:http: //msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx

于 2013-11-04T18:21:57.267 回答