ShellExecute вылетает - PullRequest
       10

ShellExecute вылетает

1 голос
/ 12 августа 2011

У меня есть программа, которая падает по инструкции ShellExecute().Если я использую метод system(), все работает нормально, но я прочитал, что system() было злом ...

Я использую Visual Studio 2010 SP1.

Итак, есть моя функция, которая вызывает ShellExecute:

ATC_GENERIC_API void __cdecl atcGenericLaunchGAG()
{
    HINSTANCE ret = ShellExecute( NULL, NULL, "MyExe.exe", NULL, "C:\\Opt\\", SW_SHOW );
    if( int(ret) > 32 )
    {
        //OK
        return;
    }
    //NOK
}

У меня есть ошибка:

Unhandled exception at 0x640361c3 in Aneto Sol.exe: 0xC0000005: Access violation reading location 0x0ba29bb0.

И отладчик ломается здесь:

void __cdecl operator delete(void* p)
{
#if !defined(_AFX_NO_DEBUG_CRT) && defined(_DEBUG)
    _free_dbg(p, _NORMAL_BLOCK);
#else
    free(p);
#endif
}

И это мой стек вызовов:

mfc100d.dll!operator delete(void * p)  Line 347 + 0xc bytes C++
mfc100d.dll!operator delete[](void * p)  Line 360 + 0x9 bytes C++
mfc100d.dll!CPlex::FreeDataChain()  Line 43 + 0xf bytes C++
mfc100d.dll!CMapPtrToPtr::RemoveAll()  Line 87 C++
mfc100d.dll!CMapPtrToPtr::FreeAssoc(CMapPtrToPtr::CAssoc * pAssoc)  Line 147 C++
mfc100d.dll!CMapPtrToPtr::RemoveKey(void * key)  Line 252 C++
mfc100d.dll!CHandleMap::RemoveHandle(void * h)  Line 230 C++

Кто-то уже имел такую ​​ошибку с ShellExecute или может объяснить мне, почему ShellExecute аварийно завершает работу так?Чем вам за помощь.

Ответы [ 2 ]

1 голос
/ 21 апреля 2013

Я также сталкивался с подобными вещами в приложении MFC.Это работало на моем ноутбуке, но после переноса кода на рабочий стол он периодически прерывал работу VS2008.Глядя на документацию ShellExecute, кажется, что установка NULL в lpOperation не так безопасна, так как она автоматически выбирает операцию, специфичную для системы.Поэтому я использовал _T ("open") в качестве операции, и пока она работает нормально.

ps я открывал путь в проводнике и URL.

1 голос
/ 12 августа 2011

Как сказал Кори Нельсон, ошибка не в самом API, а в MFC.Там может быть хук ShellExecute, который вызывает сбой вашего приложения.

...