我有一个简单Windows窗体上的输入字段中的数据,我想将其传递回批处理文件或调用方。
返回的数据本质上是复杂的。可以表示为XML或JSON有效负载的东西。因此,数字ExitCode不适合。
如果将main方法的返回类型更改为string而不是void,则该程序将不会调用。
Envirromnent args是不可变的,因此您不能执行以下操作:
string args[] = Environment.GetCommandLineArgs();
args[1] = 'blah';
(参数0是正在调用的程序)。
环境变量变得很痛苦,因为它们在调用返回后不再存在。
这两种解决方案都可能有效,但对于在内存中应该很容易执行的操作来说,这似乎是过分的杀伤力:
插座
将数据写入xml文件,以供调用者提取。
您认为应该可以返回一个字符串。有什么我想念的吗?
脚注:
(对我来说很不幸-我不得不求助于将数据写到文件中。将数据写到控制台,并将控制台输出重定向到文件,这在RPA的Automation Anywhere中产生了“另一个进程正在使用文件”的消息,我试图将数据传回的应用)。这就是生活!
最佳答案
WinForms程序可以在标准输出流/通道上输出必要的数据。就像是:
Console.WriteLine(outputDataString);
(
Console.WriteLine
是Console.Out.WriteLine
的简写)尽管需要注意以下几点,但应用程序项目也不一定需要更改为“ Console application”(如“ windows form .. console.writeline() where is console?”这样的问题或答案所建议),尽管需要注意:书面数据不会显示在控制台中(例如,如果WinForms应用程序是从控制台窗口中启动的),但仍将其写入标准输出流/通道。 (*)
例如,如果一个批处理文件应捕获程序输出,则可以为此目的使用(滥用)console
for
命令。一个简化的例子:for /f "usebackq" %%i in (`pathToYourWinFormsExecutable.exe`) do echo %%i
(要获得更多帮助,以适应您的需求,请打开控制台窗口并键入
for /?
。这将详细说明您可以使用for
命令执行的操作。)(*)旁注:
就是说,让程序将数据写入标准输出流/通道可能是不常见且奇怪的行为,除非明确捕获或重定向,否则在控制台窗口中永远不会看到此数据。根据实际使用情况以及执行此操作的程序的生命周期,建议不要实现这种“怪异”的违反直觉的行为。如果将数据写入标准输出流/通道的常见常规行为出现在所需调用者的控制台窗口中,则将项目更改为“控制台应用程序”将是首选方法。