利用环境变量向子进程传递一个参数
父进程调用下面函数,创建一个子进程并设定环境变量
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=txtContentVariable是环境变量的名字,子进程中通过这个标识来获得字符串内容,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。
