入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

利用环境变量向子进程传递一个参数

创建时间:2013-04-16 投稿人: 浏览次数:157

父进程调用下面函数,创建一个子进程并设定环境变量

bool CreateChild(TCHAR* pText)
{
const int BUFSIZE=256;
	TCHAR chNewEnv[BUFSIZE];

	LPTSTR lpszCurrentVariable;

	DWORD dwFlags = 0;

	TCHAR szAppName[] = TEXT("child.exe");//子进程child.exe放到父进程的根目录下

	STARTUPINFO si;

	PROCESS_INFORMATION pi;

	BOOL fSuccess;

	//将环境变量字符串拷贝到环境变量内存块中

	lpszCurrentVariable = (LPTSTR)chNewEnv;

	if(FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, pText)))

	{
		//拷贝失败
		return FALSE;

	}

	lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;

	//使环境变量内存块以NULL结尾

	*lpszCurrentVariable = (TCHAR)0;

	//创建子进程,指定一个新的环境变量内存块

	SecureZeroMemory(&si, sizeof(STARTUPINFO));

	si.cb = sizeof(STARTUPINFO);

#ifdef UNICODE

	dwFlags = CREATE_UNICODE_ENVIRONMENT;

#endif

	fSuccess = CreateProcess(szAppName, NULL, NULL, NULL,

		TRUE, dwFlags, (LPVOID)chNewEnv, //新的环境变量内存块

		NULL, &si, &pi);

	if(!fSuccess)

	{
		//创建子进程失败
		return FALSE;

	}
	return TRUE;
}
函数的参数:
pText就是要传递给子进程的字符串参数。
由于环境变量的设置格式必须是  Variable=txtContent 
Variable是环境变量的名字,子进程中通过这个标识来获得字符串内容,txtContent是字符串内容

子进程child.exe的接收方法如下:

const int BUFSIZE=256;
	LPTSTR pszVal=NULL;
	DWORD dwFlags = 0;
	DWORD dwRet;
	pszVal=(LPTSTR)malloc(BUFSIZE*sizeof(TCHAR));
	if(pszVal==NULL)
		return;
	dwRet = GetEnvironmentVariable(TEXT("Variable"), pszVal, BUFSIZE);
	if(0==dwRet)
	{
		MessageBox(TEXT("获取失败"),0,0);
		return;
	}
	MessageBox(pszVal,0,0);
	free(pszVal);





声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。