Привет всем.
Происходит креш программы (точнее, программы-инсталятора) при вызове ShellExecuteEx. Присходит сие только на Windows Vista.
try/catch ясное дело не помогает ибо при вызове ShellExecuteEx программа сразу здыхает (естественно с вызовом окна винды, о том что приложение сдохло, че сним делать). Может кто сталкивался с таким? Сразу оговорюсь, что не в параметрах дело, ибо даже вызов безобидного notepad.exe с помошью ShellExecuteEx в этом учатке кода (даже с verb-ом "runas") падает.
Еще инфа по вызову: Программа1 вызывает Программу2 с помошью CreateProcess, а Программа2 в свою очередь хочет вызвать Программу3 с помошью ShellExecuteEx, и тут креш Программы2.
Всем буду признателен хоть за какую-нибудь информацию.
-----------------------------------------
тут может быть ваша реклама
Здравствуйте, 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>Всем буду признателен хоть за какую-нибудь информацию.
Здравствуйте, nauro, Вы писали:
N>Происходит креш программы (точнее, программы-инсталятора) при вызове ShellExecuteEx. Присходит сие только на Windows Vista.
А на чистой Vista-машине тоже падает? Может быть, установлена какая-нибудь кривая прога, например, тулбар для IE или вроде того.
Здравствуйте, nauro, Вы писали: N>Привет всем. N>Происходит креш программы (точнее, программы-инсталятора) при вызове ShellExecuteEx.
У тебя в программе где то в другом месте ошибка обращения к памяти, скорее всего ищи в функциях работы со строками, где нибудь наверное запортил '\0' в конце строки. А лучше напиши сообщение системы, а то так не очень понятно что за "креш".
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>__try — __except надо, а не try-catch. И в обработчике посмотреть код исключения (GetExceptionCode)
Спасибо за совет, попробовал, "те же яйца, только в профиль". Вылетает сразуже при вызове ShellExecuteEx и ни в __except ни в __finally не заходит.
Может я не так блок обьявляю?
Здравствуйте, LGB, Вы писали:
LGB>А на чистой Vista-машине тоже падает? Может быть, установлена какая-нибудь кривая прога, например, тулбар для IE или вроде того.
Да, тоже падает. Причем на 7-ке работет.
-----------------------------------------
тут может быть ваша реклама
Здравствуйте, shasa, Вы писали:
S>У тебя в программе где то в другом месте ошибка обращения к памяти, скорее всего ищи в функциях работы со строками, где нибудь наверное запортил '\0' в конце строки. А лучше напиши сообщение системы, а то так не очень понятно что за "креш".
Сообщение стандартное, APPCRASH, имя модуля: Secur32.dll.
-----------------------------------------
тут может быть ваша реклама
Здравствуйте, nauro, Вы писали:
N>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>__try — __except надо, а не try-catch. И в обработчике посмотреть код исключения (GetExceptionCode) N>Спасибо за совет, попробовал, "те же яйца, только в профиль". Вылетает сразуже при вызове ShellExecuteEx и ни в __except ни в __finally не заходит. N>Может я не так блок обьявляю? N>
естественно в логе последняя запись "executing ShellExecuteEx". Ну и че сним теперь делать.. гребаная виста. Почему в 7-ке все норм, ведь родные системы вроде-бы.
-----------------------------------------
тут может быть ваша реклама
Здравствуйте, ononim, Вы писали:
N>>Всем буду признателен хоть за какую-нибудь информацию. O>CoInitialize позвать не забыли перед ShellExecute'ом?
а зачем он нужен? я ведь не использую СОМ.
-----------------------------------------
тут может быть ваша реклама
Здравствуйте, De-Bugger, Вы писали:
DB>Здравствуйте, nauro, Вы писали:
N>>ShellExecuteEx(&seInfo);
DB>Покажи заполнение seInfo с момента инициализации.
Пжлста. Не проблема. Вместо pathToExecute могу подставить "notepad.exe", а в lpVerb могу заполнить"runas" и nShow SW_MAXIMIZE, все валится при любых раскладах.
Здравствуйте, De-Bugger, Вы писали:
DB>Здравствуйте, nauro, Вы писали:
N>>К сожалению и это не помогло
DB>А пробовал голое VC приложение Hello World доточить теми 8-ю строчками с вызовом ShellExecute? Почти 100% уверен, что ошибка совсем в другом месте.
Сейчас какраз над этим работаю. Дело в том что не все так просто. В своем посте я указывал, что процедура креша такая: Приложение1 стартует Приложение2 с помошью CreateProcess а Приложение2 в свою очередь стартует ShellExecuteEx с Приложением3 (вот тут креш) и все это под инсталлером (и только под ним и крешится, прямой запуск естественно работает).
-----------------------------------------
тут может быть ваша реклама
Здравствуйте, ononim, Вы писали:
N>>>>а зачем он нужен? я ведь не использую СОМ. O>>>Затем что нужен. Читать надо мсдн внимательно. И до конца: http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx N>>К сожалению и это не помогло O>минимальный код в студию
Попробую воспроизвести на минимальном приложении, если удастся, выложу код.
-----------------------------------------
тут может быть ваша реклама
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Сразу "здыхать" программа сама не может, это сложный процесс. Вот убить ее можно сразу.
Ops>Может-может. А вообще вот хорошо расписано: http://www.rsdn.ru/forum/cpp/3913781.1.aspx
Все это мне хорошо известно. Но, говоря о том, что не может, я вовсе не это имел в виду. Я имел в виду процесс завершения приложения при возникновении критической ошибки. Он подробно рассмотрен у Соломона — Руссиновича.
O>>>>Затем что нужен. Читать надо мсдн внимательно. И до конца: http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx N>>>К сожалению и это не помогло O>>минимальный код в студию N>Попробую воспроизвести на минимальном приложении, если удастся, выложу код.
и заодно бы в крэшдамп взглянули бы
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>>>минимальный код в студию N>>Попробую воспроизвести на минимальном приложении, если удастся, выложу код. O>и заодно бы в крэшдамп взглянули бы
с минимальным приложением все ок, т.е. без креша.
Обьясните, а где взглянуть на креш дамп? Он куда-то сохраняется по умолчанию?
-----------------------------------------
тут может быть ваша реклама
Это получается GetUserName навернулся, крута
hack: попробуйте добавить флажок SEE_MASK_NOZONECHECKS
todo: разберитесь че оно у вас там падает, такого быть не должно
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>Это получается GetUserName навернулся, крута O>hack: попробуйте добавить флажок SEE_MASK_NOZONECHECKS
попробовал, да, действительно с этим флагом все ок, т.е. креш-а нету.
O>todo: разберитесь че оно у вас там падает, такого быть не должно
дык в том то и дело, что я бы сюда не писал, если бы знал КАК разобраться..
-----------------------------------------
тут может быть ваша реклама
O>>todo: разберитесь че оно у вас там падает, такого быть не должно N>дык в том то и дело, что я бы сюда не писал, если бы знал КАК разобраться..
Нуна смотреть что за параметры пришли в GetUserNameA если они невалидны — почему невалидны, если валидны — почему мог свалиться secur32!CallSPM+0x1a
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>Нуна смотреть что за параметры пришли в GetUserNameA если они невалидны — почему невалидны, если валидны — почему мог свалиться secur32!CallSPM+0x1a
сорри, но можете подсказать, как смотреть параметры?
-----------------------------------------
тут может быть ваша реклама
O>>Нуна смотреть что за параметры пришли в GetUserNameA если они невалидны — почему невалидны, если валидны — почему мог свалиться secur32!CallSPM+0x1a N>сорри, но можете подсказать, как смотреть параметры?
В windbg начать следует с kv ffff, параметры будут в 3-5 столбцах. Но если вы этого не знаете — скорее всего не разберетесь чо там дальше. Проще будет найти баг методом научного тыка деления отрезка пополам — минимизации кода пока баг не пройдет
Здравствуйте, ononim, Вы писали:
O>>>Нуна смотреть что за параметры пришли в GetUserNameA если они невалидны — почему невалидны, если валидны — почему мог свалиться secur32!CallSPM+0x1a N>>сорри, но можете подсказать, как смотреть параметры? O>В windbg начать следует с kv ffff, параметры будут в 3-5 столбцах. Но если вы этого не знаете — скорее всего не разберетесь чо там дальше. Проще будет найти баг методом научного тыка деления отрезка пополам — минимизации кода пока баг не пройдет
и все-таки, может где-то можно почитать об анализе дампа, а конкретнее — вытягивание параметров со стека?
-----------------------------------------
тут может быть ваша реклама
Сколько можно флудить? Ответ уже выдан — повреждение данных внутри программы. Что ещё здесь можно обсуждать? Пусть основатель ветки ищет ошибку в своём коде. Советую ветку закрыть.
Здравствуйте, shasa, Вы писали:
S>Сколько можно флудить? Ответ уже выдан — повреждение данных внутри программы. Что ещё здесь можно обсуждать? Пусть основатель ветки ищет ошибку в своём коде. Советую ветку закрыть.
Мда. Уважаемый, вам что, эта ветка жить мешает? Согласен, два моих последних поста не очень подходят к теме топика, но не так уж и далеко в плане последовательности решения проблемы (может кто-нибудь еще потом спасибо скажет за продолжение темы), и посылать искать ошибку в коде, после того как я обратился сюда имеено потому что НЕ нашел ее, ИМХО, неуважительно. Потому как, откуда вы знаете сколько времени я провел за исканием вышеупомянутой ошибки?
-----------------------------------------
тут может быть ваша реклама