C# 输出到当前命令提示符
本文关键字:命令提示符 输出 | 更新日期: 2023-09-27 18:31:34
我正在处理Windows窗体(C#应用程序),当我从cmd.exe运行此应用程序时,消息(错误日志,调试日志)输出到消息框。
我应该如何将此消息输出到当前CMD.exe我运行了C#应用程序?
例:我愿意
C:>D:'Demo'CsOutputMsgToCMD'CsOutputMsgToCMD'bin'Release'CsOutputMsgToCMD.exe 1
输出:此消息必须以当前 CMD 输出
The argument is 1
更新 #1:我的 C# 应用程序是 Windows 窗体应用程序(非控制台)但是我希望当用户从cmd运行此应用程序时.exe
- 情况#1:没有任何参数:它正常启动应用程序(GUI)
案例#2:有论据
- 如果参数 == 1,我在没有启动 GUI 的情况下执行操作 #1
- 如果参数 == 2,我在没有启动 GUI 的情况下执行操作 #2
- 如果参数 == n,我在没有启动 GUI 的情况下执行操作 #n
=> 不启动 GUI 应用程序时,输出必须位于当前 cmd 中.exe(运行的应用程序)
根据更新 1 使事情正常工作的常见"技巧"是有两个程序。让我们称它们为devenv.com
和devenv.exe
..com
变体是控制台应用程序。.exe
变体是窗口窗体应用程序。
如果只是从命令提示符运行devenv
,控制台应用程序将运行(因为当面对两个名称相同但扩展名不同的程序时,命令提示符优先于.com
而不是.exe
)。然后,它可以检查其参数,如果它决定调用 GUI,它将启动devenv.exe
然后退出。否则,它将像控制台应用程序一样正常运行,并保持附加到控制台。
如果它们将具有许多通用功能,我建议将大部分功能放在它们都可以共享的 DLL 程序集中。
一种方法是将项目类型更改为控制台应用程序并使用 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 语句,该输出也将转到启动应用程序的命令提示符。
此方法的一个警告是,如果双击应用程序,则会打开控制台窗口以及窗口窗体。如果它不打扰您或从命令提示符运行它是您提供的唯一选项,那么它可能对您有用。
希望这有所帮助。