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

时间:2018-08-09 13:04:53

标签: 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(如果使用Console.Error.WriteLine("Text")则为STDERR)发送到控制台。

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

是否可以将打印到控制台的强制文本作为STDOUT / STDERR发送?

1 个答案:

答案 0 :(得分:0)

AttachConsole并不完全符合您的期望,您经常需要做的是std::string s = "my_prefix,my_body,my_suffix"; char delimiter = ','; std::string pre = s.substr(0, s.find_first_of(delimiter)); std::string suf = s.substr(1 + s.find_last_of (delimiter)); std::cout << pre << std::endl; std::cout << suf << std::endl; 并更改您的stdio句柄以使用该控制台。

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