【发布时间】:2014-08-13 20:20:30
【问题描述】:
我想以这种方式更改 WinForms 应用程序,因此如果使用命令行参数调用它,它将在没有带有控制台输出的 UI 的情况下运行。因此,我将应用程序类型更改为“控制台应用程序”并写了如下内容:
my code snippet:
....
[DllImport("kernel32.dll")]
static extern bool FreeConsole();
[STAThread]
static void Main(string[] args)
{
if (args.Length == 0)
{
FreeConsole();
Application.Run(new MyForm());
}
else
Console.WriteLine("Console party");
.....
在 VS 的调试模式下,我可以看到 DOS 框弹出并隐藏。如果我通过控制台执行此操作,则命令行会一直连接到进程,并且在我关闭 MyForm 窗口之前不会响应。使用参数调用应用程序会启动“控制台方”。
FreeConsole 的返回值为 true,GetLastError 没有告诉任何错误代码。
有人知道如何从 cmd.exe 进程中分离该进程吗?
【问题讨论】:
-
这是一个被问了一遍又一遍的问题。唯一可靠的方法是拥有两个版本的流程。针对 GUI 和控制台子系统的版本。有关规范示例,请参见 python.exe 和 pythonw.exe 或 java.exe 和 javaw.exe。