#include<stdio.h>
#include<tchar.h>
#include<windows.h>
#include<locale.h>
int main()
{
system("C_Code_test.exe > from_system.txt");//over write
SECURITY_ATTRIBUTES sa = { 0 };
sa.nLength = sizeof(sa);
sa.bInheritHandle = TRUE;
HANDLE outFile = CreateFile(TEXT("rFile.txt"), FILE_APPEND_DATA, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, INVALID_HANDLE_VALUE);
STARTUPINFO st = { 0 };
st.cb = sizeof(st);
st.hStdOutput = outFile;
st.hStdError = outFile;
st.dwFlags = STARTF_USESTDHANDLES;
PROCESS_INFORMATION pi = { 0 };
if (CreateProcess(TEXT("C_Code_test.exe"), NULL, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &st, &pi))//append
{
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
_tprintf(TEXT("subprocess exit\r\n"));
}
else
{
_tprintf(TEXT("createprocess error :%d\r\n"), GetLastError());
}
CloseHandle(outFile);
system("pause");
return 0;
}
https://www.codeproject.com/Articles/16163/Real-Time-Console-Output-Redirection
实时显示,虽然实现了,但问题还是挺多的,以为,好多字符,都是空格。
虚拟机没有这个问题。
win7 console application 通过alpc 与 conhost 交互。
介绍conhost 与 console application 的关系
https://www.howtogeek.com/howto/4996/what-is-conhost.exe-and-why-is-it-running/
Conhost 有 对应的console application 的 process handle。可用于确定这种绑定关系
为什么貌似vs 编译器能实时的显示其编译信息呢?
ReadOutputString 是conhost 中的一个与 ReadConsoleOutputCharacter 函数相关的底层实现,其内部有进程与console 结构相关的转换,以及读取等操作,通过对比win2k 中泄漏的源码,现在可部分读懂其结构。
后续,将继续。
争取实现,UI界面上,实时显示console 的output 信息。