【问题标题】:Giving .NET program an output type of windows application and console application给 .NET 程序一个输出类型的 windows 应用程序和控制台应用程序
【发布时间】:2010-09-06 14:20:31
【问题描述】:

我有一个 C# 应用程序,它有一个 GUI,并且它的输出类型设置为 Windows 应用程序。我还想从命令行(通过参数)调用它,因此它也需要是一个控制台应用程序。

有没有办法让我的应用程序同时作为 Windows 应用程序和控制台应用程序运行?
有没有办法在运行时设置它还是在编译时设置?

【问题讨论】:

    标签: .net console-application windows


    【解决方案1】:

    您可以连接控制台。使 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 和控制台。
    • 古怪之处可能是您在不是您创建的控制台中编写的。输出混合。你也可以使用 AllocConsole() 但它会得到自己的。
    【解决方案2】:

    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());
        }
    }
    

    【讨论】:

      【解决方案3】:

      这是一个编译时设置:csc 编译器上有一个 target: 选项。 /target:winexe 构建 Windows 应用程序(即使用 GUI); /target:exe 构建一个控制台应用程序。不过,这两种类型的应用程序都可以接受命令行参数。

      【讨论】:

      • 我最终构建了两者 - 我想要一个真正的 Windows 程序和一个真正的控制台应用程序。
      【解决方案4】:

      即使您的应用程序输出类型设置为 Windows 应用程序,您仍然可以从命令行调用它并传递参数。

      只需将您的 Main 方法定义更改为: static void Main(string[] args) {...} 并且您可以访问“args”变量中传递的参数。

      【讨论】:

        猜你喜欢
        • 2017-07-09
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 2023-03-23
        • 2011-03-10
        • 1970-01-01
        • 2012-07-30
        • 1970-01-01
        相关资源
        最近更新 更多