有关 mfc 中创建进程的问题。

2016-04-22 12:34:24 +08:00
 init

自己想写个界面的小工具, 点一个 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);

	}
}
1246 次点击
所在节点    问与答
3 条回复
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);

}
kevinzhwl
2016-04-22 21:45:02 +08:00
cmd 可以启动了,其他的就看你自己的了
init
2016-04-24 00:06:41 +08:00
@kevinzhwl 大神 我现在遇到一个新的问题, 就是我开启子进程之后发送命令 cmd 对话框没有显示执行的结果但是从 pipe 能读到指令这是为什么
http://stackoverflow.com/questions/36812628/create-cmd-subprocess-can-receive-parent-process-order-but-cant-exec-it
这是我提出的问题
还是很感谢您回答我上个问题的哈!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/273602

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX