【发布时间】:2010-09-06 14:20:31
【问题描述】:
我有一个 C# 应用程序,它有一个 GUI,并且它的输出类型设置为 Windows 应用程序。我还想从命令行(通过参数)调用它,因此它也需要是一个控制台应用程序。
有没有办法让我的应用程序同时作为 Windows 应用程序和控制台应用程序运行?
有没有办法在运行时设置它还是在编译时设置?
【问题讨论】:
标签: .net console-application windows
我有一个 C# 应用程序,它有一个 GUI,并且它的输出类型设置为 Windows 应用程序。我还想从命令行(通过参数)调用它,因此它也需要是一个控制台应用程序。
有没有办法让我的应用程序同时作为 Windows 应用程序和控制台应用程序运行?
有没有办法在运行时设置它还是在编译时设置?
【问题讨论】:
标签: .net console-application windows
您可以连接控制台。使 Program.cs 中的代码如下所示:
[STAThread]
static void Main(string[] args) {
if (args.Length > 0) {
AttachConsole(-1);
Console.WriteLine("");
Console.WriteLine("Running in console, press ENTER to continue");
Console.ReadLine();
}
else {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
【讨论】:
Windows 窗体应用程序可以接受命令行参数。在显示应用程序主窗体之前,您只需要在主函数中处理这种情况。
static void Main(string[] args)
{
if (args.Length > 0)
{
// Run it without Windows Forms GUI
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
【讨论】:
这是一个编译时设置:csc 编译器上有一个 target: 选项。 /target:winexe 构建 Windows 应用程序(即使用 GUI); /target:exe 构建一个控制台应用程序。不过,这两种类型的应用程序都可以接受命令行参数。
【讨论】:
即使您的应用程序输出类型设置为 Windows 应用程序,您仍然可以从命令行调用它并传递参数。
只需将您的 Main 方法定义更改为: static void Main(string[] args) {...} 并且您可以访问“args”变量中传递的参数。
【讨论】: