C# 我需要如何修改我的WinForms应用程序以同时在控制台中运行?

C# 我需要如何修改我的WinForms应用程序以同时在控制台中运行?,c#,.net,winforms,console,C#,.net,Winforms,Console,我有一个用C#编写的.NET WinForms应用程序。为了支持批处理操作,我现在想让应用程序能够在控制台中运行 有没有可能让一个应用程序在启动时检测它是否在控制台中运行 为了实现这种行为,我需要做哪些修改?您可以使用program.cs中的main方法,检测命令行参数是否传入,如果是批处理,如果不是显示GUI public static void Main(string[] args) { if (args.count > 0) { //batch } else { //gu

我有一个用C#编写的.NET WinForms应用程序。为了支持批处理操作,我现在想让应用程序能够在控制台中运行

有没有可能让一个应用程序在启动时检测它是否在控制台中运行


为了实现这种行为,我需要做哪些修改?

您可以使用program.cs中的main方法,检测命令行参数是否传入,如果是批处理,如果不是显示GUI

public static void Main(string[] args)
{
 if (args.count > 0) {
  //batch
 } else {
  //gui
 }

}

您可以使用该函数为WinForms应用程序分配控制台。你可以在pinvoke上的C#上找到更多关于如何称呼这个的信息


但是,这并不能使它成为真正的控制台应用程序,我听说它有一些限制,但是,它可能会根据您的具体需要工作。

您的解决方案中应该有一个Program.cs文件,该文件包含:

static void Main() 
{
}
您会注意到,在该方法中有如下内容:

Application.Run(new Form1());
这是表单实际启动的地方,因此您可以将
Main()
修改为以下内容:

static void Main(string[] args)
{
   if(args.Length < 1)
   {
      Application.Run(new Form1());
      return;
   }
   else
   {
     // Handle your command line arguments and do work
   }
}
static void Main(字符串[]args)
{
如果(参数长度<1)
{
Application.Run(新Form1());
返回;
}
其他的
{
//处理命令行参数并执行工作
}
}

因此,如果在没有命令行参数的情况下调用您的程序,windows窗体将弹出并执行其操作。否则,您可以通过命令行执行需要执行的操作,然后在不显示表单的情况下退出。

是否支持批处理操作?你是说运行批处理文件吗?如果是,请查看processstartinfo:。我已从windows服务、windows应用程序、控制台应用程序运行批处理文件,这与你在哪里无关,与你获得的权限有关。主要原因是我的GUI允许用户在批处理模式下运行之前进行更改,我希望它能继续运行。如果你的对象需要了解你在控制台或GUI中,您可以设置一个全局变量。更好的是,根据应用程序的结构,您可以让GUI和控制台特定的类实现接口或从基类继承,或两者兼而有之。您只需要添加条件处理。如果您对从Windows窗体应用程序分配控制台感兴趣,您可能会对我的ConsoleToNet包装器感兴趣:miscel.com/pubs/ConsoleToNet/ConsoleToNet.zip。几年前我为DevSource写了这篇文章。三篇文章中有两篇仍然可用。不幸的是,第一篇文章(解释如何设置)丢失了。我不确定为什么我需要分配控制台:我想做的是从控制台运行我的应用。@汤姆:我读了你的问题,因为你想与控制台交互,所以你的应用想把东西写回控制台,也许让用户(或其他进程)处理通过控制台向其发送命令。如果您只想接受一些命令行参数并在不显示表单的情况下运行,那么编写Gorilla的答案会更好,
AttachConsole
可能比
alloconsole
更适合我的回答。@ho1:
AttachConsole
的问题是必须有一个可用的控制台,你必须知道如何找到它。如果有人在你连接控制台时关闭了控制台,你的程序就会消失(除非你施了魔法)。