C++调用外部exe, 并传参获取返回值

C++调用外部exe, 并传参获取返回值

调用exe

C++调用使用CreateProcess函数调用外部exe传参并获取其执行结果。

CreateProcess函数原型

MSDN官方地址介绍

BOOL CreateProcess(
  LPCWSTR pszImageName,				// an exe file.   
  LPCWSTR pszCmdLine,			    // parameter for your exe file.
  LPSECURITY_ATTRIBUTES psaProcess,	//Process handle not inheritable.  
  LPSECURITY_ATTRIBUTES psaThread,	// Thread handle not inheritable.   
  BOOL fInheritHandles,			    // Set handle inheritance. 
  DWORD fdwCreate,
  LPVOID pvEnvironment,
  LPWSTR pszCurDir,
  LPSTARTUPINFOW psiStartInfo,
  LPPROCESS_INFORMATION pProcInfo
);

CreateProcess示例

int32_t ZipFile(const std::string& fileName, const std::string& target)
{
	DWORD    dwExitCode = -1;
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	ZeroMemory(&si, sizeof(si));
	si.cb = sizeof(si);
	ZeroMemory(&pi, sizeof(pi));

	//所要执行的命令
	std::string cmdLine = std::string("7z a -tzip ") + target + " " + fileName;
	wchar_t msg[1000] = { 0 };
	wcscpy_s(msg, wcslen(StringToWstring(cmdLine).c_str())+1 , StringToWstring(cmdLine).c_str());

	// Start the child process.创建子进程   
	if (!CreateProcess(L"7z.exe", // an exe file.   
		msg,        // parameter for your exe file.   
		NULL,             // Process handle not inheritable.   
		NULL,             // Thread handle not inheritable.   
		FALSE,            // Set handle inheritance to FALSE.   
		0,                // No creation flags.   
		NULL,             // Use parent's environment block.   
		NULL,             // Use parent's starting directory.  
						  // 传null默认为使用父目录启动子进程,如要改变子进程运行目录可以传相应路径
		&si,              // Pointer to STARTUPINFO structure.  
		&pi)             // Pointer to PROCESS_INFORMATION structure.  
		)
	{
		return MYRESULT::CREATE_PROCESS_ERROR;
	}

	// Wait until child process exits.  等待子进程执行结束返回
	WaitForSingleObject(pi.hProcess, INFINITE);
	GetExitCodeProcess(pi.hProcess, &dwExitCode);

	// Close process and thread handles.   
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);

	if (0 != dwExitCode)return MYRESULT::ZIP_FILE_ERROR;

	return MYRESULT::SECCESS;
}
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值