我已经创建了一个具有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问题,但没有一个特别解决这个问题...那么如何实际连接到当前控制台窗口以将此数据输出回用户(例如,给他们错误消息,等)但是没有出现这些令人讨厌的问题吗?
答案 0 :(得分:1)
我在这里找到了对此的讨论:
似乎你运气不好或者你不愿意诉诸丑陋的黑客。
从上一个帖子的答案:我总是选择3:
“或者您可以稍微重构您的应用程序/源代码并提供两个可执行文件,GUI可直接启动GUI,另一个可执行控制台。”