我正在使用Windows Form(C#应用程序),当我从cmd.exe运行此应用程序时,消息(错误日志,调试日志)将输出到消息框。
如何将此消息输出到我运行C#appliation的当前CMD.exe?
实施例: 我做了
C:>D:\Demo\CsOutputMsgToCMD\CsOutputMsgToCMD\bin\Release\CsOutputMsgToCMD.exe 1
输出:此消息必须以当前CMD输出
The argument is 1
更新#1 :我的C#应用程序是Windows窗体应用程序(非控制台) 但是当用户从cmd.exe运行此应用程序时我想要
案例#2:有论据
=>如果未启动GUI应用程序,则输出必须位于当前cmd.exe(运行应用程序)
答案 0 :(得分:2)
常见"技巧"根据您的更新1使工作正常工作是两个程序。让我们称他们为devenv.com
和devenv.exe
。 .com
变体是控制台应用程序。 .exe
变体是一个Windows窗体应用程序。
如果您只是从命令提示符运行devenv
,控制台应用程序将运行(因为当面对两个具有相同名称但不同的程序时,命令提示符优先于.com
而不是.exe
扩展)。然后它可以检查它的参数,如果它决定调用GUI,它会启动devenv.exe
然后退出。否则,它将继续正常运行控制台应用程序并保持连接到控制台。
如果它们具有许多常用功能,我建议将大部分功能放在可以共享的DLL程序集中。
答案 1 :(得分:1)
一种方法是将项目类型更改为Console Applicaton并使用 Environment.GetCommandLineArgs()来获取参数。所以,
第1步:转到项目属性 - >应用程序并将输出类型更改为控制台应用程序
第2步:将主要方法更改为以下内容:
static void Main()
{
string[] args = Environment.GetCommandLineArgs();
if (args.Length <= 1)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
switch (args[1])
{
case "1": Console.WriteLine("Doing #1 stuff"); break;
case "2": Console.WriteLine("Doing #2 stuff"); break;
case "n": Console.WriteLine("Doing #n stuff"); break;
}
}
}
第一个参数是应用程序的名称,其他参数将是您发送的实际参数。
您当然应该将业务逻辑提取到单独的DLL以避免代码重复。这样,如果从没有任何参数的控制台运行,它将启动Form1窗口,否则将检查参数值。
您还可以在表单中使用Console.WriteLine语句,该输出也将转到启动应用程序的命令提示符。
使用此方法的一个警告是,如果双击应用程序,则会打开控制台窗口以及窗体。如果它没有打扰你或者从命令提示符运行它是唯一的选择,那么它可能适合你。
希望这有点帮助。