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

来源:互联网 发布:2016淘宝排名靠前技巧 编辑:程序博客网 时间:2024/05/20 20:55

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

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 UNICODEdwFlags = CREATE_UNICODE_ENVIRONMENT;#endiffSuccess = 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);