CreateProcess 함수를 이용해 cmd창을 열어 "cd .." 명령을 3번 입력하려고 합니다
STARTINFO 구조체의 hStdInput을 파이프 핸들로 지정해서 입력을 제어하려고 합니다
1번째 "cd .."명령은 정상적으로 작동이 됩니다만
2번째는 More? 라는 문자가 나타나고
3번째부터는 아무런 동작도 하지 않습니다
cd 명령 뿐만 아니라 다른 명령을 사용해도 마찬가지 입니다
질문은 아래 3가지입니다
1. 여러번 명령을 입력해도 정상적으로 작동하게 하려면 어떻게 고쳐야하나요?
2. 현재 안되는 이유는 뭔가요?
3. TerminateThread와 TerminateProcess 함수로 CreateProcess함수의 cmd를 종료하려고 하는데 바로 종료가 되지 않습니다
바로 종료시킬 방법이 있을까요?
아래는 제가 짠 코드입니다 언어는 C를 사용했습니다
#include <stdio.h>
#include <Windows.h>
#include <tchar.h>
int main(void)
{
SECURITY_ATTRIBUTES se = { 0 };
se.nLength = sizeof(se);
se.bInheritHandle = TRUE;
se.lpSecurityDescriptor = NULL;
HANDLE hCRead, hCWrite;
CreatePipe(&hCRead, &hCWrite, &se, 0);
const TCHAR com[MAX_PATH] = _T("cmd");
PROCESS_INFORMATION pi = { 0 };
STARTUPINFO st = { 0 };
st.cb = sizeof(st);
st.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
st.hStdError = GetStdHandle(STD_OUTPUT_HANDLE);
st.hStdInput = hCRead;
st.dwFlags = STARTF_USESTDHANDLES;
CreateProcess(NULL, com, NULL, NULL, TRUE, 0, NULL, NULL, &st, &pi);
CloseHandle(hCRead);
char buff[MAX_PATH] = { 0 };
DWORD written;
char com2[30] = "cd ..";
for(int i = 0; i < 3; i++)
{
WriteFile(hCWrite, com2, sizeof(com2), &written, NULL);
}
CloseHandle(hCWrite);
TerminateThread(pi.hThread, 0);
TerminateProcess(pi.hProcess, 0);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
getchar();
}