读书人

应用CreateProcess函数创建进程出错

发布时间: 2012-08-08 14:32:45 作者: rapoo

使用CreateProcess函数创建进程出错
如题,我的代码如下:

STARTUPINFO strinfo;
PROCESS_INFORMATION ProcessInfomation;
memset(&strinfo,0,sizeof(strinfo));
SoftView.SetWindowTextW(_T("正在安装迅雷7"));
strinfo.cb = sizeof(strinfo);
BOOL ret = CreateProcess(NULL,_T("regedit.exe"),NULL,NULL,TRUE,DETACHED_PROCESS,NULL,NULL,&strinfo,
&ProcessInfomation);

if (ret)
{
WaitForSingleObject(ProcessInfomation.hProcess,NULL);
}

运行时出现错误如下:
程序 中的 0x76a670ac 处最可能的异常: 0xC0000005: 写入位置 0x00e2f13a 时发生访问冲突
这是为什么?

[解决办法]
看MSDN

C/C++ code
BOOL WINAPI CreateProcess(  __in_opt     LPCTSTR lpApplicationName,  __inout_opt  LPTSTR lpCommandLine,  // 这是入参、出参,所以不能为常量地址  __in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes,  __in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes,  __in         BOOL bInheritHandles,  __in         DWORD dwCreationFlags,  __in_opt     LPVOID lpEnvironment,  __in_opt     LPCTSTR lpCurrentDirectory,  __in         LPSTARTUPINFO lpStartupInfo,  __out        LPPROCESS_INFORMATION lpProcessInformation);
[解决办法]
还要看你在Windows7或者是windows XP下,如果是前者,第二个参数必须用参数传进来,如果是xp,则可以直接赋值。
[解决办法]
我没记错的话 CreateProcess第二个参数是LPTSTR 实际上内部会改变这个字符串 函数返回时还原 核心编程有讲

读书人网 >VC/MFC

热点推荐