Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 10.02.11 16:47
Оценка:
Привет всем.
Происходит креш программы (точнее, программы-инсталятора) при вызове ShellExecuteEx. Присходит сие только на Windows Vista.
try/catch ясное дело не помогает ибо при вызове ShellExecuteEx программа сразу здыхает (естественно с вызовом окна винды, о том что приложение сдохло, че сним делать). Может кто сталкивался с таким? Сразу оговорюсь, что не в параметрах дело, ибо даже вызов безобидного notepad.exe с помошью ShellExecuteEx в этом учатке кода (даже с verb-ом "runas") падает.
Еще инфа по вызову: Программа1 вызывает Программу2 с помошью CreateProcess, а Программа2 в свою очередь хочет вызвать Программу3 с помошью ShellExecuteEx, и тут креш Программы2.
Всем буду признателен хоть за какую-нибудь информацию.
-----------------------------------------
тут может быть ваша реклама
shellexecute shellexecuteex crash vista
Re: Изза чего может падать ShellExecute
От: Pavel Dvorkin Россия  
Дата: 10.02.11 17:54
Оценка: 1 (1)
Здравствуйте, nauro, Вы писали:

N>Привет всем.

N>Происходит креш программы (точнее, программы-инсталятора) при вызове ShellExecuteEx. Присходит сие только на Windows Vista.
N>try/catch ясное дело не помогает ибо при вызове ShellExecuteEx программа сразу здыхает (естественно с вызовом окна винды, о том что приложение сдохло, че сним делать).

__try — __except надо, а не try-catch. И в обработчике посмотреть код исключения (GetExceptionCode)

Сразу "здыхать" программа сама не может, это сложный процесс. Вот убить ее можно сразу.


>Может кто сталкивался с таким? Сразу оговорюсь, что не в параметрах дело, ибо даже вызов безобидного notepad.exe с помошью ShellExecuteEx в этом учатке кода (даже с verb-ом "runas") падает.


Это скорее говорит о том, что дело именно в параметрах.

N>Еще инфа по вызову: Программа1 вызывает Программу2 с помошью CreateProcess, а Программа2 в свою очередь хочет вызвать Программу3 с помошью ShellExecuteEx, и тут креш Программы2.

N>Всем буду признателен хоть за какую-нибудь информацию.

Если только под Вистой, скорее всего — нет прав.
With best regards
Pavel Dvorkin
Re: Из-за чего может падать ShellExecute
От: LGB Канада  
Дата: 10.02.11 18:38
Оценка:
Здравствуйте, nauro, Вы писали:

N>Происходит креш программы (точнее, программы-инсталятора) при вызове ShellExecuteEx. Присходит сие только на Windows Vista.


А на чистой Vista-машине тоже падает? Может быть, установлена какая-нибудь кривая прога, например, тулбар для IE или вроде того.
Re: Изза чего может падать ShellExecute
От: shasa  
Дата: 10.02.11 21:13
Оценка:
Здравствуйте, nauro, Вы писали:
N>Привет всем.
N>Происходит креш программы (точнее, программы-инсталятора) при вызове ShellExecuteEx.

У тебя в программе где то в другом месте ошибка обращения к памяти, скорее всего ищи в функциях работы со строками, где нибудь наверное запортил '\0' в конце строки. А лучше напиши сообщение системы, а то так не очень понятно что за "креш".
Re[2]: Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 07:36
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>__try — __except надо, а не try-catch. И в обработчике посмотреть код исключения (GetExceptionCode)

Спасибо за совет, попробовал, "те же яйца, только в профиль". Вылетает сразуже при вызове ShellExecuteEx и ни в __except ни в __finally не заходит.
Может я не так блок обьявляю?
__try
{
   //call ShellExecuteEx
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
   //logging
}
-----------------------------------------
тут может быть ваша реклама
Re[2]: Из-за чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 07:37
Оценка:
Здравствуйте, LGB, Вы писали:

LGB>А на чистой Vista-машине тоже падает? Может быть, установлена какая-нибудь кривая прога, например, тулбар для IE или вроде того.

Да, тоже падает. Причем на 7-ке работет.
-----------------------------------------
тут может быть ваша реклама
Re[2]: Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 07:38
Оценка:
Здравствуйте, shasa, Вы писали:

S>У тебя в программе где то в другом месте ошибка обращения к памяти, скорее всего ищи в функциях работы со строками, где нибудь наверное запортил '\0' в конце строки. А лучше напиши сообщение системы, а то так не очень понятно что за "креш".


Сообщение стандартное, APPCRASH, имя модуля: Secur32.dll.
-----------------------------------------
тут может быть ваша реклама
Re[3]: Изза чего может падать ShellExecute
От: Pavel Dvorkin Россия  
Дата: 11.02.11 07:41
Оценка:
Здравствуйте, nauro, Вы писали:

N>Здравствуйте, Pavel Dvorkin, Вы писали:


PD>>__try — __except надо, а не try-catch. И в обработчике посмотреть код исключения (GetExceptionCode)

N>Спасибо за совет, попробовал, "те же яйца, только в профиль". Вылетает сразуже при вызове ShellExecuteEx и ни в __except ни в __finally не заходит.
N>Может я не так блок обьявляю?
N>
N>__try
N>{
N>   //call ShellExecuteEx
N>}
N>__except(EXCEPTION_EXECUTE_HANDLER)
N>{
N>   //logging
N>}
N>


Все верно.

Можно еще попробовать SetUnhandledExceptionFilter
With best regards
Pavel Dvorkin
Re[4]: Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 07:53
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Можно еще попробовать SetUnhandledExceptionFilter


Мне его вызвать перед вызовом ShellExecuteEx?
-----------------------------------------
тут может быть ваша реклама
Re[5]: Изза чего может падать ShellExecute
От: Pavel Dvorkin Россия  
Дата: 11.02.11 08:13
Оценка:
Здравствуйте, nauro, Вы писали:

PD>>Можно еще попробовать SetUnhandledExceptionFilter


N>Мне его вызвать перед вызовом ShellExecuteEx?


Да. Можно в WinMain.
With best regards
Pavel Dvorkin
Re: Изза чего может падать ShellExecute
От: ononim  
Дата: 11.02.11 08:36
Оценка:
N>Всем буду признателен хоть за какую-нибудь информацию.
CoInitialize позвать не забыли перед ShellExecute'ом?
Как много веселых ребят, и все делают велосипед...
Re[6]: Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 10:25
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Да. Можно в WinMain.

Трындец. И это не помогло. Все-равно креш.
использую так:
LONG WINAPI ExceptionHandler( struct _EXCEPTION_POINTERS *p )
{
    CString errorCode;
    errorCode.AppendFormat(p->ExceptionRecord->ExceptionCode);
    LOG(L"error occured: "+errorCode);
    
    return EXCEPTION_CONTINUE_EXECUTION;
}
...
SetUnhandledExceptionFilter(ExceptionHandler);
LOG(L"executing ShellExecuteEx");
ShellExecuteEx(&seInfo);
...

естественно в логе последняя запись "executing ShellExecuteEx". Ну и че сним теперь делать.. гребаная виста. Почему в 7-ке все норм, ведь родные системы вроде-бы.
-----------------------------------------
тут может быть ваша реклама
Re[2]: Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 10:27
Оценка:
Здравствуйте, ononim, Вы писали:

N>>Всем буду признателен хоть за какую-нибудь информацию.

O>CoInitialize позвать не забыли перед ShellExecute'ом?
а зачем он нужен? я ведь не использую СОМ.
-----------------------------------------
тут может быть ваша реклама
Re[7]: Изза чего может падать ShellExecute
От: De-Bugger  
Дата: 11.02.11 10:27
Оценка:
Здравствуйте, nauro, Вы писали:

N>ShellExecuteEx(&seInfo);


Покажи заполнение seInfo с момента инициализации.
Re[3]: Изза чего может падать ShellExecute
От: ononim  
Дата: 11.02.11 10:31
Оценка:
N>а зачем он нужен? я ведь не использую СОМ.
Затем что нужен. Читать надо мсдн внимательно. И до конца: http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
Как много веселых ребят, и все делают велосипед...
Re[8]: Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 10:34
Оценка:
Здравствуйте, De-Bugger, Вы писали:

DB>Здравствуйте, nauro, Вы писали:


N>>ShellExecuteEx(&seInfo);


DB>Покажи заполнение seInfo с момента инициализации.

Пжлста. Не проблема. Вместо pathToExecute могу подставить "notepad.exe", а в lpVerb могу заполнить"runas" и nShow SW_MAXIMIZE, все валится при любых раскладах.
SHELLEXECUTEINFO shExecInfo;

shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);

shExecInfo.fMask = NULL;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = L"";
shExecInfo.lpFile = pathToExecute;
shExecInfo.lpParameters = NULL;
shExecInfo.lpDirectory = NULL;
shExecInfo.nShow = SW_HIDE;
shExecInfo.hInstApp = NULL;
-----------------------------------------
тут может быть ваша реклама
Re[4]: Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 12:13
Оценка:
Здравствуйте, ononim, Вы писали:

N>>а зачем он нужен? я ведь не использую СОМ.

O>Затем что нужен. Читать надо мсдн внимательно. И до конца: http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
К сожалению и это не помогло
-----------------------------------------
тут может быть ваша реклама
Re[5]: Изза чего может падать ShellExecute
От: De-Bugger  
Дата: 11.02.11 13:29
Оценка:
Здравствуйте, nauro, Вы писали:

N>К сожалению и это не помогло


А пробовал голое VC приложение Hello World доточить теми 8-ю строчками с вызовом ShellExecute? Почти 100% уверен, что ошибка совсем в другом месте.
Re[5]: Изза чего может падать ShellExecute
От: ononim  
Дата: 11.02.11 15:12
Оценка:
N>>>а зачем он нужен? я ведь не использую СОМ.
O>>Затем что нужен. Читать надо мсдн внимательно. И до конца: http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
N>К сожалению и это не помогло
минимальный код в студию
Как много веселых ребят, и все делают велосипед...
Re[6]: Изза чего может падать ShellExecute
От: nauro Украина  
Дата: 11.02.11 17:20
Оценка:
Здравствуйте, De-Bugger, Вы писали:

DB>Здравствуйте, nauro, Вы писали:


N>>К сожалению и это не помогло


DB>А пробовал голое VC приложение Hello World доточить теми 8-ю строчками с вызовом ShellExecute? Почти 100% уверен, что ошибка совсем в другом месте.

Сейчас какраз над этим работаю. Дело в том что не все так просто. В своем посте я указывал, что процедура креша такая: Приложение1 стартует Приложение2 с помошью CreateProcess а Приложение2 в свою очередь стартует ShellExecuteEx с Приложением3 (вот тут креш) и все это под инсталлером (и только под ним и крешится, прямой запуск естественно работает).
-----------------------------------------
тут может быть ваша реклама
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.