среда, 25 ноября 2009 г.

1С Предприятие 7.7: Запуск ограниченного количества приложениий под Windows XP

Есть такая проблема для 1С:Предприятие 7.7 при запуске под Windows XP. Вы открываете пять (может быть шесть, семь или даже девять) баз, не важно какой вариан сетевые базы, SQL или локально, и все работает. Количество открываемых баз зависит от других открытых приложений. Затем попробуете открыть еще одну базу и происходит один из возможных симптомов:
* система зависает, процессор грузиться на 50% или нет, вы неможете открыть ни одно новое окно или программу, меню "Пуск" не открывается, ниодно меню не открывается, все уже открыте программы работают нормально. По прошествию некоторого времени система выдает ошибку (ошибка в некоторых случаях может появиться сразу) :
Ошибка загрузки модуля userdef.dll Ошибка загрузки модуля frame.dll
Ошибка приложения 1cv7s.exe, версия 7.70.0.27, модуль mfc42.dll, версия 6.2.4131.0, адрес 0x00002897.
Всплывающее окно приложения: 1С:Предприятие - [ Общий журнал (01.01.09-31.12.09)]: 1cv7s.exe - Ошибка приложения : Инструкция по адресу "0x0064015d" обратилась к памяти по адресу "0x02e21d60". Память не может быть "written".

Если в окне системной ошибки нажать кнопку Отладка и в качестве отладчика установлен DrWatson,то в его логах можно увидеть примерно следующее:
...
Исключение в приложении: Прил.: C:\Program Files\1Cv77\BIN\1cv7s.exe (pid=1592) Время: 20.11.2009 @ 16:56:58.906 Номер: c0000005 (нарушение прав доступа)
...
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\MFC42.DLL
- функция: MFC42!Ordinal4083
73d9288d 5f pop edi
73d9288e 5e pop esi
73d9288f c3 ret
73d92890 cc int
3 73d92891 cc int
3 73d92892 cc int
3 73d92893 cc int
3 73d92894 cc int
3 MFC42!Ordinal4083:
73d92895 8b01 mov eax,[ecx]
СБОЙ -> 73d92897 ff10 call dword ptr [eax] ds:0023:00000000=????????
73d92899 8bc8 mov ecx,eax
...
*----> Обратная трассировка стека <----*
*** WARNING: Unable to verify checksum for C:\Program Files\1Cv77\BIN\Frame.dll
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files\1Cv77\BIN\Frame.dll
- WARNING: Stack unwind information not available. Following frames may be wrong.

Если при этом вы сможете запустить из коммандной строки лубую команду, не входящую в список команды help (например, ping), то она без каких-либо операций вернется в коммандную строку обратно. Команда echo %ERRORLEVEL% при этом выводит результат -1073741502 (0xC0000142)

* Вы открываете базу 1С, а она просто закрывается без каких либо видимых ошибок.

Причина этого состоит в том, что для работы приложения не хватает объема памяти выделнной под desktop heap. Статья с описанием desktop heap находится на странице http://blogs.msdn.com/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx (англ).

Определить нехватку объема памяти под desktop heap можно двумя способами:
1) Программа testlimit от Sysinternals. Запустите ее с опциями testlimit.exe -u -i и в качестве рузультата увидите, что программа зарезевировала совсем малый объем в районе 100 КВ (или около того).
2) Скачате программу Desktop Heap Monitor (http://www.microsoft.com/downloads/details.aspx?familyid=5cfc9b74-97aa-4510-b4b9-b2dc98c8ed8b&displaylang=en), запустите и увидите что-то вроде
Desktop Heap Information Monitor Tool (Version 7.0.2727.0)
Copyright (c) 2003-2004 Microsoft Corp.
-------------------------------------------------------------
Session ID: 0 Total Desktop: ( 5824 KB - 8 desktops)
WinStation\Desktop Heap Size(KB) Used Rate(%)
-------------------------------------------------------------
WinSta0\Default 3072 5.7
WinSta0\Disconnect 64 4.0
WinSta0\Winlogon 128 8.7
Service-0x0-3e7$\Default 512 15.1
Service-0x0-3e4$\Default 512 5.1
Service-0x0-3e5$\Default 512 1.1
SAWinSta\SADesktop 512 0.4
__X78B95_89_IW\__A8D9S1_42_ID 512 0.4
-------------------------------------------------------------


При этом WinSta0\Default будет использован на 90-100% или около того. Решение этого вопроса описано в упомянутой мной странице http://blogs.msdn.com/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx (англ). Дополнительно в базе знаний Microsoft есть статья http://support.microsoft.com/kb/126962/.

Я же сделал следующее. Внес такие вот изменения в реестр:
1)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] "SessionViewSize"=dword:00000048
2)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems] Изменить только часть строки "Windows" "...SharedSection=1024,3072,512..." на "...SharedSection=1024,12288,512..."

Это новое значение используется в Windows Vista.

Комментариев нет:

Отправить комментарий

Постоянные читатели