c# - 使用 STDOUT 打印语句将控制台附加到 C# Windows 应用程序

标签 c# windows stdout

我有一个 C# GUI 应用程序,它还支持用于服务器端脚本的命令行模式。我的应用程序关闭输入参数的数量,如果 > 0,则附加父控制台。

[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
private const int ATTACH_PARENT_PROCESS = -1;

[STAThread]
static void Main(string[] args)
{
    bool runningFromConsole = args.Length > 0 && AttachConsole(ATTACH_PARENT_PROCESS);
    if(runningFromConsole)
        // Handle input arguments
    else
        // Launch GUI
}

我能够使用 Console.Out.WriteLine("Text"); 成功地将文本写入控制台,但该行不会作为 STDOUT(或 STDERR,如果我使用 Console.Error.WriteLine("Text"))。

在本地运行我的应用程序时,这没什么大不了的,但是在构建服务器上运行时,应用程序返回不注册。现在,我正在通过创建一个补充日志文件来解决这个问题,一旦我的应用程序完成运行,我就在控制台中 type application.log

有没有办法将打印到控制台的强制文本作为 STDOUT/STDERR 发送?

最佳答案

AttachConsole 的行为并不像您期望的那样,您需要经常做的是 AllocConsole 并更改您的 stdio 句柄以使用该控制台。

这个问题的可接受答案我可以验证在这种情况下有效,因为我已经使用过它:No console output when using AllocConsole and target architecture x86

关于c# - 使用 STDOUT 打印语句将控制台附加到 C# Windows 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51767854/

相关文章:

c# - SQL Azure 每 10 秒延迟响应一次

c# - 为什么 Resharper 将其标记为 "access to modified closure"?

html - 图像在 Windows 和 OS X 浏览器中呈现不同

windows - 如何在 Win7 -64 位中安装 openCV

python - `print()` 在某些控制台中是否会延迟,而 `stdout.flush` 不会延迟?

c# - 使用 C# 或在 C# 中的 native C++ 性能

c# - 如何从 Azure 服务器更新 Visual Studio 项目文件

c - 当我从 Julia 代码调用 midiOutOpen 时,它返回未知错误

linux - stdin、stdout、stderr在linux中究竟是如何实现的?

linux - 使用 Ctrl+C 退出后重新连接到 linux 服务输出