自己想写个界面的小工具, 点一个 button 就向已经打开的 cmd 窗口发送一条命令(所有命令都在这一个 cmd 窗口处理) 我采用的是匿名管道 现在目前遇到的问题是 我点击 button 之后没有程序没有反应, 既没有报错也没有崩溃 尝试打印信息之后,发现程序运行到创建进程之后就过不去了,开了任务管理器也没有发现有 cmd 进程 哪位能指点一下或者提供一下能实现我这需求的思路也行 代码如下
void CeeDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
DWORD ErrorCode;
DWORD dw = -1;
char ErrorString[500];
HANDLE hRead, hWrite, dWrite, dRead;
SECURITY_ATTRIBUTES sa; //创建安全信息结构体
sa.bInheritHandle = true;
sa.lpSecurityDescriptor = 0;
sa.nLength = sizeof(sa);
CreatePipe(&dRead, &dWrite, &sa, 4096); //创建输入管道
if (ErrorCode = GetLastError())
{
std::cout << "创建输出管道失败!" << std::endl;
}
STARTUPINFO si; //创建进程开始信息结构体
GetStartupInfo(&si);
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.wShowWindow = SW_SHOW;
si.hStdOutput = dRead;
si.hStdInput = dWrite;
CString temp2("C:\\Windows\\System32\\cmd.exe");
char cmdline[100];
sprintf_s(cmdline, "%s", temp2);
PROCESS_INFORMATION pi; //创建进程
CreateProcessW(_T("cmdline"), NULL, NULL, NULL, true, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); //此为命令窗口所用的创建进程语句
if (rrorCode = GetLastError())
{
std::cout << "创建进程失败!" << std::endl;
MessageBox(_T("CreateProcess Failed!"), _T("提示"), MB_OK | MB_ICONWARNING);
}
}
1
kevinzhwl 2016-04-22 21:44:31 +08:00
仅供参考
STARTUPINFO si={0}; //创建进程开始信息结构 si.cb =sizeof(STARTUPINFO); GetStartupInfo(&si); si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.wShowWindow = SW_SHOW; si.hStdOutput = dRead; si.hStdInput = dWrite; CString temp2("C:\\Windows\\System32\\cmd.exe"); TCHAR cmdline[100]; _stprintf_s(cmdline, _T("%s"), temp2); PROCESS_INFORMATION pi={0}; //创建进程 BOOL bOK = CreateProcess(cmdline,NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); //此为命令窗口所用的创建进程语句 if (!bOK /*&&(ErrorCode = GetLastError())*/) { std::cout << "创建进程失败!" << std::endl; MessageBox(_T("CreateProcess Failed!"), _T("提示"), MB_OK | MB_ICONWARNING); } |
2
kevinzhwl 2016-04-22 21:45:02 +08:00 1
cmd 可以启动了,其他的就看你自己的了
|
3
init OP @kevinzhwl 大神 我现在遇到一个新的问题, 就是我开启子进程之后发送命令 cmd 对话框没有显示执行的结果但是从 pipe 能读到指令这是为什么
http://stackoverflow.com/questions/36812628/create-cmd-subprocess-can-receive-parent-process-order-but-cant-exec-it 这是我提出的问题 还是很感谢您回答我上个问题的哈! |