Не слишком ли долго lpparameters SHELLEXECUTEINFO работают в windows xp?
UpdateData(TRUE); SHELLEXECUTEINFOA sei; memset(&sei, 0, sizeof SHELLEXECUTEINFOA); sei.cbSize = sizeof SHELLEXECUTEINFOA; sei.fMask = SEE_MASK_NOCLOSEPROCESS /*| SEE_MASK_FLAG_NO_UI*/; sei.lpVerb = "runas"; sei.lpDirectory = GetModulePath(); sei.lpFile = "curl.exe"; sei.lpParameters = m_strCmd; //MessageBox(m_strCmd, _T("tip"), MB_OK); sei.nShow = SW_SHOW; if (!ShellExecuteExA(&sei)) { CString strLog; strLog.Format(_T("启动curl失败(code:0x%x)"), GetLastError()); MessageBox(strLog); return; }
В этом коде lpParameters - это длинная строка длиной более 2048, ошибки возникают при запуске кодов в"ShellExecuteExA(& sei)", ошибка - " необработанное исключение в RunCurl.exe(KERNELE32.DLL): 0xC0000005: нарушение доступа."(RunCurl.exe это название моего проекта).Это похоже на доступ к памяти,но я не знаю, что делает это.Если я уменьшу длину lpParameters, то эта функция будет работать нормально.Если я запускаю эту функцию с длинным lpParameters(длина более 2048) в CMD, то она тоже работает нормально.И эта ошибка никогда не возникала на WIN7,я думаю, если SHELLEXECUTEINFOA не может получить слишком длинную строку на XP?
Что я уже пробовал:
читайте msdn, отладку в xp и WIN7, google