Меню

Программа выполнила недопустимую ошибку

Помогите побороть ошибку: Программа выполнила недопустимую операцию и будет закрыта.

27.05.2009, 19:17. Показов 2656. Ответов 0


Значит в проге используются потоки. Все работает отлично.
Но при выходе сразу после команды END вылетает следующая ошибка

Программа выполнила недопустимую операцию и будет закрыта.
По кнопке сведения выдает следующее
————
Программа PROJECT1 вызвала сбой при обращении к странице памяти
в модуле MSVBVM60.DLL по адресу 0167:66014555.
Регистры:
EAX=00000000 CS=0167 EIP=66014555 EFLGS=00010206
EBX=ffffffff SS=016f ESP=0064fc30 EBP=0064fc34
ECX=00401182 DS=016f ESI=020bfe9c FS=3c77
EDX=8194ebfc ES=016f EDI=0064fce0 GS=0000
Байты по адресу CS:EIP:
8b 46 0c 8b 00 8b 40 04 89 45 08 eb e7 33 c0 eb
Содержимое стека:
0127f010 0064fc50 66014e73 00000000 66014d99 0064fce0 0127f010 00000000 0064fc70 6601b4ad 00000001 0127f010 00000000 00000000 00000000 0117f114
———-
Перед выходом из программы почистил все объектные переменные.
Может кто чего подскажет. Как побороть эту ошибку.
ПОМОГИТЕ!

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



«Программа выполнила недопустимую операцию…»

Ø

Я
   «Программа выполнила

10.11.04 — 11:19

Я работаю с клиентами по наладке и установке 1С. И вот у некоторых из них довольно часто происходит по непонятным мне причинам вылет из 1С с вышеуказанным сообщением(«Программа выполнила недопустимую операцию и будет закрыта»). При этом никаких номеров ошибки больше не выдается. Просто 1С закрывается и все. Причем причину я выяснить не могу, т.к. при повторном запуске такой ситуации м. и не быть. А если она происходит всегда, то спасет либо перезагрузка машины, либо просто все начинает нормально работать на следующий день.
Замечено это было в основном Вин98 и вроде еще(точно не берусь вспомнить) под Вин2000. И причем все время либо при печати (посылке на принтер уже готовой таблицы), либо при открытии формы кого-нибудь регламентированного отчета (опять же присутствует таблица в форме). Происходит это в основном на стареньких пнях (1,2), но которые еще вполне нормально работают.
Дело явно не в кривости написанной начинки документа или отчета. Дело во взаимодествии ОС и самой платформы 1С. Кто в курсе — подскажите, что является причиной, и как м. уменьшить процент вылетов 1С? И как это объяснить клиентам :)? (ведь спрашивают же)

   warenic

1 — 10.11.04 — 11:22

<><>‹—Гаґџ“З©ґ•цЊВЕг¶И“ђыІИфЉ•ГGгІџ›“©І•§Љ—Гг¶И“ђяІ•чЉ’”OгзџЖђэІ•уЉЕГGґеИ“ђяІ’р‰ћГOгІњА“ьеАN§Э—ГLгіџВ“«ІАҐЉ—”µеМ‘В«д•уЉВАNгдџ–З©±З Љ”Гґ¶џЖђЁ±‘уЉ•ГGгдџ“З©±Б Љ–Аґ¶џ—ђЎІВ­ЉђГGгіџљЗ©ІИOҐЉВАMгањ“ђ©ІВ­ЉЕГOа·њАЗ©ІВOҐЉЖГа·џАђь±БOҐЉ•Ггіџ‘ђ©±ВцЭ—АNґ¶џЕђьІ‘ ЉДГгвџ“ђъІИOр罹††ъЈх™Чр}•е

   Zanuda

2 — 10.11.04 — 11:22

Я подозреваю, что одна или несколько сетевух глючат. Соединение с сервером прерывается, и вот результат. По моему, проблеме в сетке.

   edd

3 — 10.11.04 — 11:26

(2) В общем ты угадал в 90% — это компы в сети. Но вот был случай, кода глючил именно комп, на котором стояла база, и где была программа 1С сама. Спасло то, что второй ОС стоял XP — под ним проблем не было.

   Zanuda

4 — 10.11.04 — 11:29

(3) С такой проблемой не сталкивался.

   edd

5 — 10.11.04 — 11:32

А ОС какая утебя?
Еще дополнение к теме: не всегда при печати. Иногда просто при загрузке 1С. В самом начале при работе процедуры инициализации. Это как раз тот случай, когда и 1С и база были на одной машине.

   Zanuda

6 — 10.11.04 — 11:35

(5) Операционка — винда 2000. А при и нициализации — может быть одновременно на другом компе кто-нить тоже пытался в базу войти. 1С поди по таймауту и вылетела…

   edd

7 — 10.11.04 — 11:43

Исключено: все было на одной машине. И была она не в сети. К тому же если таймаут, то она не вылетает сразу, а говорит, что истекло время ожидания и что-то там еще.

   noook

8 — 10.11.04 — 11:45

память
сетевухи
винда в последнюю очередь(если нормально поставлена была)

   Spirtus

9 — 10.11.04 — 11:46

Мне в свое время помогла игра с дровами принтера. Игра заключалась в шаманских плясках с бубном и установке дефолтных драйверов из операционки.

   kamazist

10 — 10.11.04 — 11:51

У меня была проблема с печатью регламентированных отчетов. Когда отправляешь на печать вылетала 1С-ка. Спасла переустановка предприятия. По видимому в твоем случае все же гонит винда.

   Путин

11 — 10.11.04 — 11:54

У меня регулярно подобная ситуация. Подозрение на аппаратную часть (память?)

   edd

12 — 10.11.04 — 11:59

Ну хоть приятно, что я не одинок :-). В принчипе — не сомневался ни сколько. Проще — когда одна машина, хуже то, что у всех клиентов разные принтера, разные (скорее всего) дистрибутивы виндовс, разные релизы платформ. Понтяно, что память, принтеры. Хотелось бы реальных подтверждений, фактов. Ну да видимо с этим сложнее. Главно, что характер глюков является хаотическим — то есть то нет.

  

edd

13 — 10.11.04 — 12:01

Здраствуйте, Владимир Владимирович. (:-)) да, только вот под той же аппаратной частью по 98 — глючит почти всегда (войти нельзя — при инициализации), а вот по XP там же — все без проблем. Драйвера, ядро…?

Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену… по-видимому, нам следует остановиться на чем-то одном из двух.
Фредерик Брукс-младший

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Что такое Shdocvw.dll? Shdocvw.dll — Windows Explorer-файл, который, как известно, генерирует ошибки, потому что путь к ключу реестра  пустой, DLL является незарегистрированным, или если файл отсутствует.

В этой статье мы обсудим несколько примеров ошибок shdocvw.dll  и какие нужно предпринять для их решения .

Ошибка 1

На компьютере с системой Windows XP, когда вы дважды щелкните  правой кнопкой мыши на ярлык » Мои Документы» на рабочем столе, вы можете получить сообщение об ошибке, указанные ниже:

“Explorer — Эта программа выполнила недопустимую операцию и будет закрыта”.

Когда вы щелкните Подробности,появится одно из следующих сообщений :

“Программа Explorer вызвала ошибку в стеке памяти в модуле SHDOCVW.DLL в  <адресе памяти>”

— Или —

“Программа Explorer вызвала ошибку в стеке памяти в модуле KERNEL32.DLL в  <адресе памяти>”

Причина ошибки

Выше написанные сообщения об ошибке возникают, когда значения в реестре пустые или не содержат путь к папке » Мои Документы».

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders

Разрешение ошибки

Примечание: Шаги, описанные ниже, требуют редактирования реестра. Рекомендуется, чтобы вы выполняли эти шаги с осторожностью, и только если вы можете работь с Реестром Windows. Ошибки при изменении реестра могут нанести непоправимый ущерб вашей системе. В качестве меры предосторожности, всегда делайте резервную копию реестра перед внесением изменений в реестр. Вы можете создать резервную копию реестра вручную или использовать для этой цели надежный инструмент реестра, такой, как  RegGenie .

Для исправления сообщений об ошибке написанных выше, выполните следующие действия:

  1. Нажмите кнопку Пуск и нажмите кнопку Выполнить.
  2. В поле введите : regedit и нажмите Enter, чтобы открыть Редактор Реестра.
  3. Далее перейдите и выберите следующую запись реестра
    HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders
  4. Далее, в правой панели окна Редактора Реестра , найдите и дважды щелкните Личные значения.
  5. В поле Значение Данных  введите путь к папке » Мои Документы » (путь по умолчанию : C:Мои Документы), и нажмите кнопку OK.
  6. Перезагрузите компьютер.

Ошибка 2

На компьютере с Windows XP, при попытке подключиться к веб-сайту, используя Internet Explorer 7 или Internet Explorer 8 с пакетом Обновления 1 — отображается пустая страница , вместо веб-сайта который  вы хотели открыть.

Причина ошибки

Выше описанная проблема возникает, когда в системе есть некоторые  не зарегистрированные DLL обновления.

Разрешение ошибки

Решение,для выше описанного сообщения об ошибке, сначала нужно зарегистрировать файлы urlmon.dll и actxprxy.dll  и перезапустить Internet Explorer. Если проблему устранить не удалось, то зарегистрируйте следующие библиотеки:

  • shdocvw.dll
  • browseui.dll
  • mshtml.dll
  • msjava.dll
  • scrrun.dll
  • msxml.dll

Чтобы зарегистрировать DLL, вам необходимо выполнить следующие шаги:

  1. Нажмите кнопку Пуск и выберите пункт Выполнить.
  2. Далее, в поле Открыть введите следующую команду и нажмите Enter, чтобы зарегистрировать библиотеку DLL
    regsvr32 DLLFilename

Когда я запускаю команды “Rundll32.exe shdocvw.dll, DoOrganizeFavDlg” появляется пустое диалоговое окно, вместо списка любимых веб-сайтов.

Когда вы запустите команды Rundll32.exe shdocvw.dll, DoOrganizeFavDlg  на компьютере с Windows XP и с Internet Explorer 8, установленном на ней,должен быть показан список ваших любимых веб-сайтов . Если вы получили пустое диалоговое окно, для устранения проблемы скачайте самое накопительное обновление безопасности Internet Explorer для Windows  на   веб-сайте  Microsoft Update .

Кроме того, вы можете запустить команды Rundll32.exe ieframe.dll, DoOrganizeFavDlg  для просмотра избранного информации.

Файл  shadocvw.dll отсутствует   — что нужно  я должен делать?

Для решения проблемы, скачайте копию  файла shadocvw.dll из надежных онлайн DLL каталогов и сохраните файл в папку C:WindowsSystem32 .

  • Распечатать

Оцените статью:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

(0 голосов, среднее: 0 из 5)

Поделитесь с друзьями!


  1. wasm_test

    wasm_test

    wasm test user

    Публикаций:

    0

    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582

    Кросспост из моего блога http://the-gr8.cih.ms/2010/01/blog-post_7649.html
    [​IMG]
    Всем знакомое назойливое окошко позволяет вызвать just-in-time отладчик, но самое обидное, что этот отладчик может быть только один единственный. А мне вот захотелось иметь возможность выбора между отладчиками — запустить олли, WinDbg или же создать минидамп с помощью ntsd.
    [​IMG]
    Список отладчиков хранится в подключах HKLMSoftwareMicrosoftWindows NTAeDebug в виде подключей «0», «1», «2», …
    default value в них — путь к отладчику, а значение Name — отображаемое имя.
    Добавить новый можно с помощью regedit. По умолчанию выбирается отладчик «0», имейте в виду, когда будете составлять список.

    Список параметров (мини-хелп):

    * -i установка. Старый отладчик ставится в список нулевым HKLMSoftwareMicrosoftWindows NTAeDebug с названием «Default» (если оно свободно, если занято, то ничего не меняется — на случай установки поверх уже установленного). Так же это можно юзать, если какой-то другой отладчик «занял» место jitmgr, тогда он восстановит себя в качестве jit отладчика. Параметр Auto меняется на 1 — окно dwwin более не отображается (его заменяет окошко jitmgr с расширенной информацией и выбором отладчика).
    * -u uninstall. Нулевой отладчик из списка ставится на место jitmgr.
    * %ld %ld параметры для вызова как jit. Первый — Process ID, второй — Event Handle. Так же может быть третий параметр — —log. В этом случае jitmgr логирует свой собственный отладочный вывод DbgPrint в jitmgr.log в корень системного диска. Рекомендуется установить этот флажок — jitmgr иногда лажает с определением EXCEPTION_RECORD. Эти файлы в случае фейла jitmgr (покажет messagbox) прошу присылать мне: [​IMG]

    Отдельного внимания заслуживает поиск EXCEPTION_RECORD* указателя в рухнувшем процессе. Для этого вкратце опишу механизм работы стандартного UnhandledExceptionDispatcher:

    * если параметр Auto==0, то подгружается faultrep.dll и вызывается ее ф-я ReportFault
    * ReportFault создает секцию с информацией об исключении и запускает dwwin.exe -x -s SectionHandle, который отобржает окно «xxx has encountered a probled and needs to close» с кнопками Debug и Close (кнопка Send у меня отключена :).
    * при нажатии Debug ReportFault() возвращает определенное значение, по которому UnhandledExceptionFilter запускает процесс по пути из реестра параметр AeDebugDebugger, передавая в параметры PID и хендл евента, который отладчик должен сигнальнуть по окончании (видимо, для корректного завершения процесса).
    * UnhandledExceptionFilter делает ZwWaitForMultipleObject() на объектах процесса отладчика (на случай, если он завершится, так и не сигнальнув евент) и на евенте. По причине ожидания на процессе отладчика, jitmgr не завершается, пока не отработает запускаемый отладчик, иначе завершение jitmgr потенциально может убить рухнувший процесс, если отладчик решит его разморозить. Впрочем, он тогда и евент отсигналит, но в любом случае надо повисеть, пока дочерний отладчик не приаттачится, иначе он не успеет за завершающимся процессом.

    Поскольку UnhandledExceptionFilter thread-safe функция, во время ожидания на евенте и процессе отладчика в других потоках могут возникнуть каскадные исключения, являющимися следствиями первого или имеющими общую причину. Поэтому даже нажатие на Close в окне dwwin не всегда завершает процесс (многие замечали?). Вероятно, он просто сигналит евент и завершается. Для предотвращения этого у меня в jitmgr а) на время работы jitmgr оборачивается в ZwSuspendProcess/ZwResumeProcess, замораживая процесс и б) есть кнопка «Kill Process», которая насильно убивает процесс сразу же.
    Алгоритм поиска EXCEPTION_RECORD:

    * перебрать все потоки, найти потоки, у которых State == THREAD_STATE_WAIT
    * для каждого потока в состоянии ожидания получить контекст, прочитать содержимое стека по адресу Context.Ebp, которое в случае вызова из UnhandledExceptionFilter должно иметь следующую раскладку (подчеркиваю — содержимое по EBP. По ESP будет адрес возврата в ZwWaitForMultipleObjects):

    1. (ebp+0) old EBP
    2. (ebp+4) адрес возврата из UnhandledExceptionFilter в фильтр исключений SEH (блок __try/__except) функции BaseThreadStart или BaseProcessStart
    3. (ebp+8) указатель на EXCEPTION_POINTERS — первый параметр UEF.

    * найти базу kernel32.dll в дочернем процессе через раскрутку SEH: я никогда не видел Address Space Layout Randomization (ASLR), поэтому предположил, что это сработает :)
    * проверить, что *(ebp+4) принадлежит кернелу (еще можно проверить, что *esp — адрес возврата в ZwWaitForMultipleObjects действительно указывает туда, но это, имхо, уже лишнее; также можно проверить, что *ebp и *(ebp+8) принадлежат стеку этого потока)
    * проверить, что по адресу *(ebp+4)-5 действительно расположен call UnhandledExceptionFilter
    * в случае успеха всех условий, прочитать **(ebp+8) — указатель на EXCEPTION_RECORD

    Замечания и критика приветствуются. Выводится инфа в OutputDebugString (смотреть в DbgView), в случае ошибки поиска EXCEPTION_RECORD инфа дублируется в jitmgr.log — прошу высылать этот файл, если будет такая ошибка.

    P.S. Раньше была кнопочка Minidump (между Debug и KillProcess), но была выпилена по причине, что проще добавить ntsd явно в список отладчиков.
    P.P.S. Была мысля добавить автодобавление нового отладчика при указании пути к exe и выборе типа отладчика (чтобы автоматом дописывались параметры для известных отладчиков).

    Исходники и EXE в аттаче


  2. wasm_test

    wasm_test

    wasm test user

    Публикаций:

    0

    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582

    В догонку еще один кросспост из моего блога насчет отладчика ntsd и генерирования дампов:

    Все слышали про kd/windbg? Думаю, многие. Но немногие знают, что есть так же и хороший аналогичный отладчик ntsd (NT Symbolic Debugger) для юзермодных программ. Старая версия его даже входит в Windows по умолчанию (%systemroot%system32ntsd.exe). Нормальная версия поставляется в Debugging Tools for Windows вместе с kd/WinDbg.

    Интерфейс — мощный текстовый, как у kd. Команды аналогичны kd при работе в юзер моде.
    Одна из полезных команд — !analyze -v (как для ядра), делает анализ исключения. Вместе с возможностью аттачиться к процессам в режиме just-in-time и генерацией минидампа — весьма заманчиво.
    Отладчик поддерживает скрипты, что делает его еще более заманчивым.
    Есть так же поддержка отладки по сети (ключ -remote).

    Примеры:

    * ntsd -p PID — Аттачнуться к процессу по его PID. Так же можно добавить параметр -g (Auto ‘Go’ — автоматически выполнит Go, не брякаясь в процессе).
    * ntsd -p PID -e EVENTHANDLE — используется для Just-In-Time отладки, второй параметр — event handle, который нужно сигналить, чтобы «разморозить» упавший процесс, который ждет отладчика (там выполняется ZwWaitForMultipleObjects на хендлах евента и процесса отладчика).
    * Опция -с позволяет написать список команд для выполнения при старте. Например -c «.dump C:Dumpsjit.dmp;q» сгенерирует минидамп по указанному пути и завершит отладчик. Можно использовать в just-in-time вместе с опцией -noio, которая подавляет показ консольного окна. В саму .dump можно добавить флаг /u, который сделает имя дампа уникальным в виде jit_046C_2010-01-06_03-15-26-921_06D8.dmp и /ma, которая будет генерировать расширенный дамп. Весьма полезно для тех случаев, когда комп тестится на машине тестера и нужно узнать инфу об исключении.
    * Ключики как в kd/WinDbg: -y указывает путь к символам, -z путь к крешдампу, который надо загрузить.

    Just-In-Time
    Как я уже говорил, его можно прописать в just-in-time отладку, чтобы упавшим программам генерился минидамп, или, например, выполнялся определенный скрипт — ограничения навязаны только полетом фантазии.
    Для этого надо прописать примерно следующее в HKLMSoftwareMicrosoftWindows NTCurrentVersionAeDebugDebugger:
    ntsd -p %ld -e %ld -g -noio -c «.dump /u /ma C:jit.dmp;q»
    Можно и не делать это вручную, в JIT его прописывает свитч -iae.

    Поскольку хочется иметь одновременно еще и «гуйный» отладчик, например, Olly, нужно иметь возможность выбора JIT-Отладчика. Об этом мой следующий пост (про мою софтинку jitmgr).

    http://www.opferman.net/Text/ntsd.txt — некоторая инфа про отладку в нем.


  3. n0name

    n0name

    New Member

    Публикаций:

    0

    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia

    jit’ом регаешь свой fault.exe ?


  4. wasm_test

    wasm_test

    wasm test user

    Публикаций:

    0

    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582

    n0name
    fault.exe делает mov dword [12345678], ABCDEF01
    диалог просто сообщает, что она выполнила некорректную операцию. как окно dwwin, только информативнее и с возможностью выбора отладчика. Добавил картинку для сравнения (начало 1 поста)


  5. wasm_test

    wasm_test

    wasm test user

    Публикаций:

    0

    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582

    Обновил софтинку.
    Changelog for v0.2:
    * изменен алгоритм поиска EXCEPTION_RECORD. Тут сказали, что в случае ASLR база длл в каждом процессе одинакова + я убрал проверку, что адрес возврата из UEF лежит в kernel32 — он может лежать в любом месте, поскольку можно установить сех и в обработчике вызвать UnhandledExceptionFilter — все равно будет запущен dwwin. Поэтому убрана эта проверка и добавлена проверка, что адрес возврата *esp == ZwWaitForMultipleObjects+0x0c (UEF вызывает ZwWaitForMultipleObjects для ожидания на объектах процесса отладчика и синхронизируещего евента).

    1. HMODULE hNtdll = GetModuleHandle («ntdll.dll»);
    2. PVOID pZwWaitForMultipleObjects = GetProcAddress (hNtdll, «ZwWaitForMultipleObjects»);
    3. // Zw service has the following code:
    4. //  [ZwXXX+00] MOV EAX, (ServiceNumber)
    5. //  [ZwXXX+05] MOV EDX, 7FFE0300 ; ServiceCall
    6. //  [ZwXXX+0A] CALL DWORD PTR DS:[EDX]
    7. //  [ZwXXX+0C] RETN (argumentSize)
    8. // ReturnAddress should be ZwWaitForMultipleObjects+0c (address of RETN)
    9. ULONG_PTR ReturnAddress = 0;
    10. ReadProcessMemory (hProcess, (LPCVOID)ctx.Esp, &ReturnAddress, sizeof(ULONG_PTR), &BytesRead);
    11. if (ReturnAddress — 0x0c == (ULONG_PTR)pZwWaitForMultipleObjects)

    * поправлена небольшая ошибка с ведением лога


WASM

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Программа вангуард не запущена код ошибки 128
  • Программа бизнес пак ошибка