C# 从控制台应用程序返回字符串

C# 从控制台应用程序返回字符串,c#,console,C#,Console,我真正想做的是 static string Main(string[] args) 但这不起作用,您唯一的选择是void和int。那么,有哪些不同的方法可以返回我需要返回到调用应用程序的字符串呢 背景 我需要编写一个控制台应用程序,专门设计用于从另一个应用程序调用 Process.Start("MyCode.exe -Option 12aaa1234"); 此调用程序如何接收从该可执行文件返回的字符串 研究 据我所知,此时我唯一的选择是让调用应用程序在启动进程之前将侦听流附加到进程的标准输出

我真正想做的是

static string Main(string[] args)
但这不起作用,您唯一的选择是
void
int
。那么,有哪些不同的方法可以返回我需要返回到调用应用程序的字符串呢

背景

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

Process.Start("MyCode.exe -Option 12aaa1234");
此调用程序如何接收从该可执行文件返回的字符串

研究

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

事实上,这是实现这一目标的唯一方法,还是我可以使用一些不同/更好的方法

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

其他选项将涉及某种形式的开发,对于单个字符串,这可能会大大增加开发工作量


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

Idea 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 ReturnToOther()
{
字符串ToReturn=“MyString”;
System.IO.File.writealText(“Path”,Encrypt(ToReturn));
}
公共字符串加密(字符串到加密)
{
字符串加密=空
char[]数组=ToEncrypt.ToCharArray();
for(int i=0;i
在您现在正在制作的应用程序中:

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;
}
public void GetString()
{
string STR=Decrypt(System.IO.File.ReadAllText(“路径”);
WriteLine(“字符串是:{0}”,STR);
}
//如果要在文件存在之前保持此运行,请使用以下命令:
/*
public void GetString()
{
对于(int i=0;i>-1;++i)
{
if(System.IO.File.Exists(“路径”))
{
string STR=Decrypt(System.IO.File.ReadAllText(“路径”);
WriteLine(“字符串是:{0}”,STR);
打破
}
其他的
{
//如果你想做什么就做什么
}
}
} */
公共字符串解密(字符串到解密)
{
已解密字符串=空
char[]数组=ToDecrypt.ToCharArray();
for(int i=0;i
想法2:

使用TCP将字符串上载到端口,例如LocalHost(127.0.0.1),然后使用TCP侦听器在您正在开发的应用程序上接收字符串

一篇关于TCP的文章-

希望这有帮助:)

编辑:


再看看套接字:

您确定应该将其作为单独的应用程序而不仅仅是库调用吗?您不能返回字符串。您可以
输出
字符串,并在其他应用程序中捕获该输出。您有很多选择。您可以写入文件,可以写入环境变量,可以创建命名管道,可以使用注册表值,可以使用网络套接字或任何其他选项。不过,没有比使用标准输出更容易的了。@ebyrob非常正确。这不是一份详尽的清单。事实上,这就是我一直在寻找的答案。是的,还有其他方法可以做到这一点,但它们都涉及更多。我只控制可执行文件,而不是调用它的应用程序。我正在尝试创建一个“无依赖性”接口,用于外部源可以使用的库的某些部分,而不必让它们包含和引用它们自己的项目中直接涉及的所有18个dll。这似乎是最简单的,但我需要一种返回数据的方法。我喜欢tcp到本地主机的想法。这不是我想要的,但我很喜欢:-@Nevyn BTW-TCP是进程间通信的一种形式。如果这是同一个系统,管道可能会更好。一台计算机,两个不同的程序,我唯一能设计的是远程调用的可执行接口。不过我在设计上是有自由的,所以我可以使用我想要的任何返回方法,告诉他们如何访问它……我只是无法控制它运行的内容、运行的时间、运行的系统等等