createpipe关于 CreateProcess 到指定目录下执行某个命令,如何指明路径

createpipe  时间:2021-06-05  阅读:()

VC如何利用匿名管道实现进程间通信?

void CParentProcessDlg::OnOK() { SECURITY_ATTRIBUTES SecurityPipe; SecurityPipe.bInheritHandle = TRUE; SecurityPipe.lpSecurityDescriptor = NULL; SecurityPipe.nLength = sizeof(SECURITY_ATTRIBUTES); if (CreatePipe(&m_hRead,&m_hWrite,&SecurityPipe,0)) { STARTUPINFO strinfo; memset(&strinfo,0,sizeof(STARTUPINFO)); strinfo.cb = sizeof(STARTUPINFO); strinfo.hStdInput = m_hRead; strinfo.dwFlags = STARTF_USESTDHANDLES; strinfo.hStdOutput = m_hWrite; PROCESS_INFORMATION procInfo; memset(&procInfo,0,sizeof(PROCESS_INFORMATION)); CreateProcess(NULL,"ChildProcess.exe",&SecurityPipe,&SecurityPipe,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&strinfo,&procInfo); char data[]="明日科技"; unsigned long len; if (! WriteFile(m_hWrite,data,8,&len,NULL)) { MessageBox("数据写入失败"); } } else MessageBox("匿名管道62616964757a686964616fe4b893e5b19e31333332616364创建失败"); } void CChildProcessDlg::OnButtonread() { HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); if (hInput != INVALID_HANDLE_VALUE ) { char data[10]; memset(data,0,10); unsigned long len; int pos = ReadFile(hInput,data,10,&len,NULL); m_Data = data; UpdateData(FALSE); CloseHandle(hInput); } }

c++中管道问题,为什么 老是捕获不到printf 的数据

你虽然设置了STD_OUTPUT_HANDLE,但是并不是把它挂到stdout上了,所以printf仍然输出到console。

你需要做如下操作: int hout = _open_osfhandle((long)hWrite, _O_TEXT); FILE *fout = _fdopen(hout, "wt"); *stdout = *fout; 这样把hWrite挂给stdout,然后printf才会给hWrite输出。

还要注意的是要调用fflush(stdout)。

这是因为printf对标准输出是自动刷缓冲到设备的,但对重定向却不会,所以要自己手动刷。

关于 CreateProcess 到指定目录下执行某个命令,如何指明路径

以下是 CreateProcess 函数的原型 BOOL CreateProcess ( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ); 可以看得出来倒数第三个参数是设置当前程序的所在路径的,你不妨试一下,我一般用的是CreateProcessW,从参数看来,好像是一样的,这个我没有去深究,但是相对ShellExecute,CreateProcess还是与之不同的,这个我在实践中发现CreateProcess是由系统分配环境,然后具体怎么执行我就一下子说不清楚了,但是ShellExecute执行过程就是将文件名以及参数传递给DOS命令,然后由终端去运行,这个过程就有点类似于我们手动双击该EXE一样, 对了,LS的可以试一下,先将应用程序切换当前所在目录试一下,你不是说一定要在C:\Users\ai\\android-sdk-windows\tools 目录下执行吗?那你在代码中增加切换工作目录的操作,应该能成功

RFCHOST - 洛杉矶CN2 GIA VPS季付23.9美元起 100Mbps带宽

RFCHOST,这个服务商我们可能有一些朋友知道的。不要看官网是英文就以为是老外服务商,实际上这个服务商公司在上海。我们实际上看到的很多商家,有的是繁体,有的是英文,实际上很多都是我们国人朋友做的,有的甚至还做好几个品牌域名,实际上都是一个公司。对于RFCHOST商家还是第一次分享他们家的信息,公司成立大约2015年左右。目前RFCHOST洛杉矶机房VPS正进行优惠促销,采用CN2优化线路,电信双...

ShockHosting($4.99/月),东京机房 可享受五折优惠,下单赠送10美金

ShockHosting商家在前面文章中有介绍过几次。ShockHosting商家成立于2013年的美国主机商,目前主要提供虚拟主机、VPS主机、独立服务器和域名注册等综合IDC业务,现有美国洛杉矶、新泽西、芝加哥、达拉斯、荷兰阿姆斯特丹、英国和澳大利亚悉尼七大数据中心。这次有新增日本东京机房。而且同时有推出5折优惠促销,而且即刻使用支付宝下单的话还可获赠10美金的账户信用额度,折扣相比之前的常规...

vpsdime7美元/月,美国达拉斯Windows VPS,2核4G/50GB SSD/2TB流量/Hyper-V虚拟化

vpsdime怎么样?vpsdime是2013年成立的国外VPS主机商,以大内存闻名业界,主营基于OpenVZ和KVM虚拟化的Linux套餐,大内存、10Gbps大带宽、大硬盘,有美国西雅图、达拉斯、新泽西、英国、荷兰机房可选。在上个月搞了一款达拉斯Linux系统VPS促销,详情查看:vpsdime夏日促销活动,美国达拉斯vps,2G内存/2核/20gSSD/1T流量,$20/年,此次推出一款Wi...

createpipe为你推荐
企鹅医生共享体检真的方便吗iso20000认证iso20000认证流程是怎样的mac地址克隆路由器的Mac地址克隆有什么作用?非凡论坛如何才能注册成为非凡论坛的会员?水晶易表如何在win7环境和office2010环境下成功安装水晶易表chrome系统Chromenbsp;OS是操作系统吗?腾讯公告腾讯出什么事了 所有QQ用户空间农场什么的都打不开 有的连空间都进不去 又受攻击了?12种颜色十二种颜色的英文怎么读?js后退在全局js中屏蔽了后退功能,但是想让自己定义的后退有用assemblyinfo求教如何修改AssemblyInfo.cs的版本号
vps动态ip 双线vps 谷歌域名邮箱 企业主机 windows主机 googleapps 创宇云 国内php空间 gg广告 小米数据库 权嘉云 hostker 秒杀预告 789电视网 adroit 免费cdn 流媒体加速 申请免费空间和域名 免费的asp空间 全能空间 更多