有没有办法启动具有以下功能的 C# 应用程序?
- 通过命令行参数判断是窗口应用还是控制台应用
- 它在被要求打开窗口时不显示控制台,并且在从控制台运行时不显示 GUI 窗口。
例如,
myapp.exe /help将在您使用的控制台上输出到标准输出,但是
myapp.exe本身会启动我的 Winforms 或 WPF 用户界面。
到目前为止,我所知道的最佳答案涉及拥有两个独立的 exe 并使用 IPC,但这感觉真的很糟糕。
我有哪些选择和权衡取舍才能获得上述示例中描述的行为?我也愿意接受特定于 Winform 或特定于 WPF 的想法。
最佳答案
使该应用程序成为常规 Windows 应用程序,并在需要时即时创建控制台。
更多详情请访问 this link (下面的代码)
using System;
using System.Windows.Forms;
namespace WindowsApplication1 {
static class Program {
[STAThread]
static void Main(string[] args) {
if (args.Length > 0) {
// Command line given, display console
if ( !AttachConsole(-1) ) { // Attach to an parent process console
AllocConsole(); // Alloc a new console
}
ConsoleMain(args);
}
else {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
private static void ConsoleMain(string[] args) {
Console.WriteLine("Command line = {0}", Environment.CommandLine);
for (int ix = 0; ix < args.Length; ++ix)
Console.WriteLine("Argument{0} = {1}", ix + 1, args[ix]);
Console.ReadLine();
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
}
}
关于c# - 如何创建一个 C# 应用程序来决定是显示为控制台应用程序还是窗口应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/807998/