|
Странные глюки из-за Shell "proga.exe", vbNormalFocus
|
|||
---|---|---|---|
#18+
Вопрос какой-то мистический. Собственно тестовая программа в итоге состоит из одной строчки. Код: vbnet 1. 2. 3.
где proga.exe -консольное приложение C++, очень навороченное и сложное, телефония в общем. Так вот, я его всегда несколько лет этим shell запускаю, и никаких проблем. Короче внес некие нехилые изменения в proga.exe, при тестировании все работало отлично, дописал "морду настроек" на VB как обычно (параметры сохранюются в реестре, proga.exe их оттуда берет не суть). Все готово, на XP все отлично работает, собрал инсталлятор, и вот те раз: При выполнении определенной процедуры "proga.exe has stopped working". Короче симптомы такие: 1) crash никогда не происходит на XP/Win2003 2) вероятность crash на Vista/Win7 x64 ничтожно мала, но таки бывает 3) вероятность crash на Vista/Win7 32 бит крайне высока. 4) если crash не произошел при первом выполнении этой процедуры (определенная процедура в proga.exe), то он не произойдет и при следующих выполнениях этой процедуры, т.е. при старте proga.exe как бы взводится в состояние "будет crash", или не взводится в это состояние, и это носит случайный характер. А если процедуру выполнять хоть сотни раз, то она crash не даст, если не глюканула с первого раза как произошла. Я короче неделю дебажил эти сишные коды, пытался разобраться в цепочке функций, чего-то менял и ничего не помогает. При каком-то запуске proga.exe все равно войдет в состояние в котором сглючит. Но тут меня осенило: вместо своей громоздкой оболочки я написал тест из одной приведенной строчки. Shell "proga.exe" Дык вот, crash происходит из-за shell, если запускать exe-шник двойным щелчком мыши (как обычно), то глюки уходят. Я в панике, всегда думал что Shell() это то же самое что "ручками". Что делать, на что менять Shell??? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 07:32 |
|
Странные глюки из-за Shell "proga.exe", vbNormalFocus
|
|||
---|---|---|---|
#18+
Дмитрий77, А ShellExecute пробовал? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 08:03 |
|
Странные глюки из-за Shell "proga.exe", vbNormalFocus
|
|||
---|---|---|---|
#18+
Shocker.Pro, Да уже попробовал. Код: vbnet 1. 2. 3. 4. 5. 6.
Вроде не глючит. Но хотелось бы каких-то гарантий и научного обоснования. Это решает проблему, или может уменьшает вероятность? А где-нибудь на другом компе сглючит? Или надо в сишных кодах дальше копаться? Или не надо? Но копаться уже достало. Но там еще попутная проблема: Есть еще режим запуска "Как сервис виндоус" где proga.exe работает в оболочке NSSM - the Non-Sucking Service Manager Код запуска "сервиса" такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
А проблема та же: такой-же глюк. Причем (кажется), если запускать сервис из оснастки "службы" ручками, то не глючит, а с вышепреведенным кодом глючит. Здесь чего делать? Хорошо если я прав, хуже если эффект дает NSSM-оболочка. net start proga ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 08:37 |
|
Странные глюки из-за Shell "proga.exe", vbNormalFocus
|
|||
---|---|---|---|
#18+
авторДык вот, crash происходит из-за shell, если запускать exe-шник двойным щелчком мыши (как обычно), то глюки уходят. Я в панике, всегда думал что Shell() это то же самое что "ручками". Что делать, на что менять Shell??? Дебажить плюсовый код, ошибка там. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 10:51 |
|
Странные глюки из-за Shell "proga.exe", vbNormalFocus
|
|||
---|---|---|---|
#18+
Дмитрий77Но там еще попутная проблема: Есть еще режим запуска "Как сервис виндоус" где proga.exe работает в оболочке NSSM - the Non-Sucking Service Manager Причем (кажется), если запускать сервис из оснастки "службы" ручками, то не глючит, Хорошо если я прав, хуже если эффект дает NSSM-оболочка. Ничего хорошего, я не прав. Сервис сам по себе тоже глючит. Сервис использует CreateProcess, код сервиса сишный. alixДебажить плюсовый код, ошибка там. Да не, вы правы конечно, я тоже так думаю. От этой мысли не легче. Там проблема в том, что 1) есть dll 2) есть exe dll претерпела за 2 года 3000 (!) транков. автор dll добавил нужный мне новый функционал, но сделал это для "текущей версии" dll, то что было 2 года назад поддерживать не хочет exe работает с тем, что было 2 года назад, с текущей версией dll не компилируется, не работает и автор exe 1.5 года как недоступен и на письма не отвечает последовательно "пройдя" через эти 3000 релизов dll назад (есть свои методы, чтоб не совсем тупо), я вычленил нужные коды, добавил их в старую версию dll, и сделал код exe рабочим. Естественно воспроизвести ошибку на тек. версии dll я не могу (чтоб долбать автора dll), т.к. exe с ним скомпилировать даже для теста нереально, а другое приложение на котором тестировался новый функционал с текущей версией dll глюков не дает. Наедине с собой и километрами чужого кода короче. Баг трудно уловимый, хотя и научился его воспроизводить через Shell. Буду удалять изменения последовательно, от труднопонимаемых логов толку все равно мало. Но еще не факт что смогу исправить и совместить работоспособный функционал с отсутствием бага, даже если найду... Почему именно 32-битные виста и семерка и почему shell? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 16:26 |
|
Странные глюки из-за Shell "proga.exe", vbNormalFocus
|
|||
---|---|---|---|
#18+
Дмитрий77alixДебажить плюсовый код, ошибка там. Да не, вы правы конечно, я тоже так думаю. От этой мысли не легче. Уже легче. Нашел ошибку в сишном коде. Короче была там функция MediaPatch::RemoveSink(const StreamPtr & stream), и больно сильно отличалась в старом и новом релизе, эксперименты показали что критично, для совмещения версий нужны были оба варианта, а "совместить" мне такую штуку не по зубам. Ну я сделал RemoveSink() RemoveSink_old() и поставил "стрелку" Код: plaintext 1. 2. 3. 4.
а в другом месте осталось безусловное Код: plaintext 1.
а должно было быть хотя бы Код: plaintext 1.
проглядел... А это ж телефония, там на миллисекунды счет, чуть задержка уже все поехало по другому сценарию, а все эти connection, mediastreams -все надо close, release, remove, update, ajust -чуть что не так, стрим подвис и -deadlock. Из за самого дебага может возникнуть миллисекундная задержка кот. поменяет сценарий. Короче думаю Shell ни причем. Просто вносит случайную задержку (а на вистах она другая) и слабое место кода вылетает в аут. Хорошо хоть наткнулся. Или все же заменить его на ShellExecute? Хотя думаю не стоит, стоял бы у меня ShellExecute, оно бы стало стрелять в режиме "Сервис Виндоус" (когда консоль на экран не выводится даже при тестах) и вообще ничего бы не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 06:31 |
|
Странные глюки из-за Shell "proga.exe", vbNormalFocus
|
|||
---|---|---|---|
#18+
авторКороче думаю Shell ни причем. Shell не причем. VB очень популярное средство разработки в мире, и любая ошибка компилятора была бы замечена много лет назад. "Баги" в VB6 появляются в основном из-за багов разработчиков новых версий ос. Например в 2009 году вышел малоизвестный апдейт для VB6 (это при том, что МС официально давно уже не поддерживает VB6), который исправляет ошибку работы с контролами в Windows7 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 11:04 |
|
Странные глюки из-за Shell "proga.exe", vbNormalFocus
|
|||
---|---|---|---|
#18+
alixShell не причем. Да понял уже, спасибо. alixНапример в 2009 году вышел малоизвестный апдейт для VB6 (это при том, что МС официально давно уже не поддерживает VB6), который исправляет ошибку работы с контролами в Windows7 Что за апдейт? Единственное что я делаю (из-за 64-битных Vista и Win7), это контролы надо регистрировать в реестре (доверяю инсталлятору в этом плане). Для XP/win2003 и кажется для 32-битных Vista/7 достаточно бухнуть контрол в папку с прогой. А апдейтам что-то не доверяю. У меня после такого автоматического апдейта VC2005 EE года 2 назад скомпилированные C++ экзешники перестали запускаться на всех компах кроме "своего", пришлось откатывать систему и с тех пор к апдейтам отношусь с опаской. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2012, 01:09 |
|
|
start [/forum/topic.php?fid=60&msg=37760309&tid=2157876]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 140ms |
0 / 0 |