我真正想做的是这个
static string Main(string[] args)
但这不起作用,您唯一的选择是void
和int
。那么,有什么不同的方法可以返回我需要返回调用应用程序的字符串?
背景
我需要编写一个专门设计用于从其他应用程序调用的控制台应用程序
Process.Start("MyCode.exe -Option 12aaa1234");
这个调用程序如何接收从该可执行文件返回的字符串?
研究
据我所知,此时我唯一的选择是让调用应用程序在启动之前将监听流附加到流程的标准输出流,并使用Console.Out发送“return”。从我的可执行文件内写。这实际上是这样做的唯一方法,还是我可以使用不同/更好的东西?
答案 0 :(得分:13)
这实际上是这样做的唯一方法,还是我可以使用不同/更好的东西?
这不是唯一的方式,但它是最常见的。
其他选项涉及某种形式的interprocess communication,这可能会为单个字符串带来更多的开发工作。
请注意,如果调用应用程序是.NET应用程序,和您可以控制这两个应用程序,那么编写类库而不是控制台应用程序可能更有意义。这将允许您将代码完全分开,但让可执行文件“调用”到您的库中以获取字符串数据。
答案 1 :(得分: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