从WPF应用程序附加到现有控制台的变通方法?

时间:2014-09-08 14:09:39

标签: c# .net wpf command-line console

我已经创建了一个具有GUI的WPF应用程序,但我也希望它可以选择从命令行运行,所以我已将其添加到我的App.xaml.cs中:

[DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    if (e.Args.Count() > 0)
    {
        CreateReport(e.Args);
        Environment.Exit(0);
    }
}

void CreateReport(string[] arguments)
{
    AttachConsole(-1);
    // Parse arguments, generate report, etc.
}

这种方法存在两个问题:

问题1:从命令行运行应用程序在关闭之前等待用户输入:

C:\Code>GenerateReport.exe -output Example.html
Started report generation.
Report has been generated.
<-- Console waits until user input here, even though the application has finished doing its business.

问题2:These are command line redirection operators。 AttachConsole由于某种原因阻止他们工作:

C:\Code>GenerateReport.exe -output Example.html > Log.txt <-- Causes no output in Log.txt (just an empty file)!

我已经检查了其他Stack问题,但没有一个特别解决这个问题...那么如何实际连接到当前控制台窗口以将此数据输出回用户(例如,给他们错误消息,等)但是没有出现这些令人讨厌的问题吗?

1 个答案:

答案 0 :(得分:1)

我在这里找到了对此的讨论:

The problem of attachconsole

似乎你运气不好或者你不愿意诉诸丑陋的黑客。

从上一个帖子的答案:我总是选择3:

“或者您可以稍微重构您的应用程序/源代码并提供两个可执行文件,GUI可直接启动GUI,另一个可执行控制台。”