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
目录下执行吗?那你在代码中增加切换工作目录的操作,应该能成功
特网云为您提供高速、稳定、安全、弹性的云计算服务计算、存储、监控、安全,完善的云产品满足您的一切所需,深耕云计算领域10余年;我们拥有前沿的核心技术,始终致力于为政府机构、企业组织和个人开发者提供稳定、安全、可靠、高性价比的云计算产品与服务。官方网站:https://www.56dr.com/ 10年老品牌 值得信赖 有需要的请联系======================特网云推出多IP云主机...
racknerd从成立到现在发展是相当迅速,用最低的价格霸占了大部分低端便宜vps市场,虽然VPS价格便宜,但是VPS的质量和服务一点儿都不拉跨,服务器稳定、性能给力,尤其是售后方面时间短技术解决能力强,估计这也是racknerd这个品牌能如此成功的原因吧! 官方网站:https://www.racknerd.com 多种加密数字货币、信用卡、PayPal、支付宝、银联、webmoney,可...
棉花云官网棉花云隶属于江西乐网科技有限公司,前身是2014年就运营的2014IDC,专注海外线路已有7年有余,是国内较早从事海外专线的互联网基础服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务(SaaS),拥有丰富的国内BGP、双线高防...
createpipe为你推荐
12种颜色12种颜色的英语怎么写,用中文怎么读收费视频微信里的视频通话是怎么收费 ?人脸识别解锁华为手机人脸识别解锁如何设置微信网页版怎么看朋友圈电脑版的微信怎么看朋友圈红牛下架红牛下架事件怎么回事?美宜佳最近怎么买不到红牛了?web推送javaweb写的聊天网页是如何向客户端发送消息?翻译图片识别有那种根据图片识别上面的英文进行翻译的软件么?第三方支付系统第三方支付平台是什么病毒分析网站25个最恶意的病毒网站视频服务器软件服务器方面软件那个网站最多,急啊!!!!如果带教程的更好,嘿嘿……
80vps 腾讯云分析 nerds 什么是服务器托管 smtp虚拟服务器 河南移动梦网 免费的域名 97rb 碳云 九零网络 websitepanel shuangshiyi 29美元 免费免备案cdn 大容量存储控制器驱动 西部数码空间购买 个人web服务器软件 dns服务器是什么 英国伦敦大学学院 好玩的免费网络游戏 更多