Summary: | Установка данных Гарант 7.4.1 | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Andrey Vusik <night> |
Component: | Установка программ / MSI | Assignee: | Александр Морозов <amorozov> |
Status: | CLOSED FIXED | QA Contact: | Денис Баранов <baraka> |
Severity: | blocker | ||
Priority: | P3 | CC: | amorozov, baraka, kirill, kondratyuk, lav, misha |
Version: | 1.0.12 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | 5552, 5570, 5571 | ||
Bug Blocks: | 5333, 5395 | ||
Attachments: | Сообщение об ошибке |
Description
Andrey Vusik
2010-04-12 19:47:44 MSD
Сделал патч, частично решающий багу (по баге #5345). Программа устновки запускается, но ругается на garant.ini Возможно установка прошла с ошибкой Для проверки установки данных нужно попробовать либо взять нормальный garant.ini, либо скопировать установленный Гарант с винды Запуск с Гаранта из Windows не происходит. Ругается на отсутствие GblAdapter.dll. Аналогичное сообщение появляется и при запуске установки данных. Created attachment 1681 [details]
Сообщение об ошибке
При запуске в eterhack. Появляется сообщение: "File DONGLE.DLL not found" При трейсе по каналу file видно, что программа ищет и не находит lz32.dll скопировал lz32.dll. Ничего не изменилось. Чуть выше идёт поиск других dll: trace:file:GetLongPathNameW returning L".\\DONGLE.dll" ..... trace:file:ReadFile 0x48 0x3d0000 10313 0x33f40c (nil) trace:file:RtlDosPathNameToNtPathName_U (L"C:\\Program Files\\Garant-Local\\apps\\winNT\\DONGLE.dll",0x33f4f8,(nil),(nil)) trace:file:RtlGetFullPathName_U (L"C:\\Program Files\\Garant-Local\\apps\\winNT\\DONGLE.dll" 520 0x33f264 (nil)) trace:file:wine_nt_to_unix_file_name L"\\Program Files\\Garant-Local\\apps\\winNT\\DONGLE.dll" not found in /net/wine/bottles/prav/garant/7-4-1/.wine-local2/dosdevices/c:/Program Files/Garant-Local/apps/winNT trace:file:RtlDosPathNameToNtPathName_U (L"C:\\Program Files\\Garant-Local\\apps\\winNT\\haspms32.dll",0x33f36c,(nil),(nil)) ....... trace:file:ReadFile 0x48 0x3d0000 24886 0x33f0cc (nil) trace:file:RtlDosPathNameToNtPathName_U (L"C:\\Program Files\\Garant-Local\\apps\\winNT\\haspms32.dll",0x33f1b8,(nil),(nil)) trace:file:RtlGetFullPathName_U (L"C:\\Program Files\\Garant-Local\\apps\\winNT\\haspms32.dll" 520 0x33ef24 (nil)) trace:file:wine_nt_to_unix_file_name L"\\Program Files\\Garant-Local\\apps\\winNT\\haspms32.dll" not found in /net/wine/bottles/prav/garant/7-4-1/.wine-local2/dosdevices/c:/Program Files/Garant-Local/apps/winNT Возможно проблема действительно в dongle.dll Пробовал запускать через wwdbg. Исключения в процессе работы программы не возникают. При добавления отладочного сообщения в GetFileAttributes перед сообщением об ошибке видим: При первом запуске (после чистки папки) fixme:file:GetFileAttributesA name='C:\users\wine\Application Data\Garant-Local\settings\userdata\0001_utl.s.temp(53)' fixme:file:GetFileAttributesA name='C:\users\wine\Application Data\Garant-Local\settings\userdata\0001_val.k.temp(48)' fixme:file:GetFileAttributesA name='C:\users\wine\Application Data\Garant-Local\settings\userdata\0001_val.s.temp(49)' fixme:file:GetFileAttributesA name='C:\users\wine\Application Data\Garant-Local\settings\global.dic' притом к моменту выдачи сообщения файла global.dic в указанном месте нет При последующих запусках: fixme:file:GetFileAttributesA name='C:\users\wine\Application Data\Garant-Local\settings\userdata\0001_val.s.#kp' fixme:file:GetFileAttributesA name='C:\users\wine\Application Data\Garant-Local\settings\userdata\0001_cfg.k.temp(22).~kp' fixme:file:GetFileAttributesA name='C:\users\wine\Application Data\Garant-Local\settings\userdata\0001_cfg.s.temp(23).~kp' fixme:file:GetFileAttributesA name='C:\users\wine\Application Data\Garant-Local\settings\userdata\0001_utl.s.#kp' Притом файла 0001_utl.s.#kp нет, есть файл 0001_utl.s.~kp Видимо C:\users\wine\Application Data\Garant-Local\settings\userdata\ и есть та временная директория, куда распаковываются файлы Добавил трейс в функцию LoadLibraryA. Лог перед ошибкой: fixme:module:LoadLibraryA name='shlwapi.dll', ret=0x7e160000 fixme:module:LoadLibraryA name='.\dongle.dll', ret=0x0 Добавил вывод текущей директории: fixme:module:LoadLibraryA name='.\dongle.dll', ret=0x0 fixme:module:LoadLibraryA cur dir = 'C:\Program Files\Garant-Local\apps\winNT' Положил в указанную директорию фиктивный dongle.dll. Тест из баги #5571 показал, что в таком случае LoadLibrary успешно загружает файл. Но, файл не загружается! Добавил вызов GetFileAttributesA для проверки существования файла. функция возвращает значение 1, что соответствует read-only. У других аналогичных dll атрибуты равны 32 (FILE_ATTRIBUTE_ARCHIVE) Пробовал принудительно выставить атрибуты 32 перед загрузкой - функция SetFileAttributesA возвращает успешное выполнение, но атрибуты не меняет. GetLastError возвращает 998, что соответствует ERROR_NOACCESS. Трассировка LoadLibrary показала, что вызываемая load_library выполняется успешно, а следующая за ней process_attach возвращает ошибку STATUS_ACCESS_VIOLATION функции process_attach передаётся структура wm, содержащая информацию о других dll,которые также должны быть загружены. Далее для каждой dll выполняется process_attach (рекурсивно). Выглядит это следующим образом: fixme:module:process_attach (L"DONGLE.dll",(nil)) - START fixme:module:process_attach dlls to attach=7 fixme:module:process_attach attach: name='L"KERNEL32.dll"', status=0 fixme:module:process_attach attach: name='L"user32.dll"', status=0 fixme:module:process_attach attach: name='L"advapi32.dll"', status=0 fixme:module:process_attach attach: name='L"KERNEL32.dll"', status=0 fixme:module:process_attach attach: name='L"KERNEL32.dll"', status=0 fixme:module:process_attach (L"haspms32.dll",(nil)) - START fixme:module:process_attach dlls to attach=1 fixme:module:process_attach attach: name='L"KERNEL32.dll"', status=0 fixme:module:process_attach attach: name='L"haspms32.dll"', status=-1073741819 fixme:module:LdrLoadDll 3-nts = 0xc0000005 Видно, что process_attach для haspms32.dll завершается с ошибкой. Проверил. haspms32.dll в папке есть (на момент загрузки dongle.dll) для haspms.dll выполняется process_attach для связанной с ней kernel32.dll. Далее вызывается MODULE_InitDLL, которая и возвращает STATUS_ACCESS_VIOLATION При вызове call_dll_entry_point для файла haspms.dll происходит исключение. Отловить проблему пока не удаётся - исключение перехватывается, и отладчик не запускается функция MODULE_InitDLL в ntdll вызывает dll_entry_point, отлавливая исключения При этом haspms32.dll падает. Если в обработчике исключений принудительно возвращать status = STATUS_SUCCESS, то сообщение об отсутствующей dongle.dll не появляется. Но в конце появляется диалог "Сохранить статус установки?" Похоже, что данные всё-равно не устанавливаются Теперь возникает переполнение стека: fixme:module:LoadLibraryA Loading library 'shlwapi.dll', result=2115829760 err:seh:setup_exception_record stack overflow 1116 bytes in thread 0021 eip 7ef5cb40 esp 00240ed4 stack 0x240000-0x241000-0x340000 Притом установщик сам перехватывает исключения, где конкретно происходит падение посмотреть не удаётся. вижу работа кипит ;(( помогают ГАРАНТовские коллеги из Москвы или не очень ? хотел от себя как от специалиста по ГАРАНТу добавить что установка ДАННЫХ не имеет ничего общего с "Установка программ / MSI" вот. вдруг кому поможет. Пробовал запрещать программе устанавливать свои обработчики прерываний при помощи функций: SetUnhandledExceptionFilter RtlAddVectoredExceptionHandler Дебаггер запускается, но выполнение программы не останавливает и ничего не выводит: wine: Unhandled exception 0x0eedfade at address 0x7ede9e02 (thread 0038), starting debugger... err:seh:setup_exception_record stack overflow 992 bytes in thread 0038 eip 7ef5cab4 esp 010e0f50 stack 0x10e0000-0x10e1000-0x20e0000 fixme:seh:SetUnhandledExceptionFilter REJECTED fixme:module:LoadLibraryA Loading library 'winex11.drv', result=2119696384 Попробовал посмотреть сообщения по каналу relay. Последним идёт вызов: 0042:Call user32.LoadStringA(00400000,0000ff14,020df200,00000400) ret=0040706a 0042:Ret user32.LoadStringA() retval=0000001d ret=0040706a 0042:Call KERNEL32.RaiseException(0eedfade,00000001,00000007,020df5f8) ret=004d1c12 0042:Call KERNEL32.UnhandledExceptionFilter(020df0e8) ret=7ef98597 Если добавить отладочный код в эту функцию, то получим: ixme:resource:LoadStringA instance = 0x400000, id = fd4b, buffer = 0x20dfa28, length = 1024 fixme:resource:LoadStringA returning "Black" fixme:resource:LoadStringA instance = 0x400000, id = ff14, buffer = 0x20df200, length = 1024 fixme:resource:LoadStringA returning "List index out of bounds (%d)" wine: Unhandled exception 0x0eedfade at address 0x7edcfe02 (thread 003a), starting debugger... При установке файлов данных Гаранта на текущем eter-1.0.12 пару раз выдаётся ошибка 'failed to load module gsock32.dll, затем 'Библиотека "GblAdapter.dll" не найдена. Продолжение работы невозможно!' Если модифицировать eter-1.0.12 так, чтобы LoadLibraryA возвращала не 0 для GblAdapter.dll, то при запуске datasetup.exe выдаётся сообщение: 'Неправильная версия библиотеки "GblAdapter.dll". Продолжение работы невозможно!' В логе при этом: 003e:Call KERNEL32.LoadLibraryA(008bb280 "GblAdapter.dll") ret=008be854 003e:Ret KERNEL32.LoadLibraryA() retval=44444444 ret=008be854 003e:Call KERNEL32.SetCurrentDirectoryA(029b61bc "C:\\Program Files\\Garant-Local\\apps") ret=0040ab80 003e:Ret KERNEL32.SetCurrentDirectoryA() retval=00000001 ret=0040ab80 003e:Call KERNEL32.SetErrorMode(00000000) ret=008be923 003e:Ret KERNEL32.SetErrorMode() retval=00000001 ret=008be923 003e:Call KERNEL32.GetProcAddress(44444444,008bed5c "_tie_dll_init_with_locale@8") ret=008bece2 003e:Ret KERNEL32.GetProcAddress() retval=00000000 ret=008bece2 003e:Call KERNEL32.RaiseException(0eedfade,00000001,00000007,020dfd60) ret=008bed2c При установке с eterhack с патчем 'kernel32: Fix Garant 7.4.1 installation (eterbug #5345)' выдаётся сообщение о том, что не удаётся найти файл garant.ini molebox.exe в WINE не запускается. А упакованный демо-версией вариант, видимо, можно запустить только на той машине, на которой он был упакован, так что запаковать на Windows не получится. (In reply to comment #27) > При установке файлов данных Гаранта на > текущем eter-1.0.12 пару раз выдаётся ошибка > 'failed to load module gsock32.dll, затем 'Библиотека > "GblAdapter.dll" не найдена. Продолжение работы > невозможно!' > > Если модифицировать eter-1.0.12 так, чтобы > LoadLibraryA возвращала не 0 для GblAdapter.dll, то при > запуске datasetup.exe выдаётся сообщение: > 'Неправильная версия библиотеки "GblAdapter.dll". > Продолжение работы невозможно!' Если я ничего не путаю, то при загрузке garant.exe в eter-1.0.12 тоже появляется подобное сообщение. При запуске в eterwine этого сообщения нет, выдаётся сообщение о том, что отсутствуют файлы данных. Отсюда вывод: в eterwine эта ошибка уже как-то исправлена. Думаю не стоит пока тратить на неё время, предлагаю отлаживать в eterwine. > При установке с eterhack с патчем 'kernel32: Fix Garant > 7.4.1 installation (eterbug #5345)' выдаётся сообщение о > том, что не удаётся найти файл garant.ini В какой бутылке? Я проверяю в бутылке prav/garant/7-4-1/local2. Там такого сообщения нет. Из гаранта прислали тестовые файлы DONGLE.exe и HASPMS32.exe c просьбой прислать лог и скрин сообщения об ошибке. Программы падают почти сразу после загрузки. Лог не создаётся, до вывода графического сообщения не доходит. Часть лога падения: Backtrace: =>0 0x0038b9b1 (0x0032fcd0) 1 0x00393c67 (0x0032fcfc) 2 0x003965f7 (0x0032fd1c) 3 0x00331301 (0x0032fd5c) 4 0x003308ed (0x0032fe6c) 5 0x00330026 (0x0032fe84) 6 0x0032fe98 (0x0032fe98) 7 0x7ede74aa start_process+0x136(peb=0x7ef30000) [/home/vitperov/Projects/wine-dev/dlls/kernel32/process.c:998] in kernel32 (0x0032fcfc) 8 0x00393c67 (0x0032fd1c) 9 0x00331301 (0x0032fd5c) 10 0x003308ed (0x0032fe6c) 11 0x00330026 (0x0032fe84) 12 0x0032fe98 (0x0032fe98) 13 0x7ede74aa start_process+0x136(peb=0x7ef30000) [/home/vitperov/Projects/wine-dev/dlls/kernel32/process.c:998] in kernel32 (0x0032fd1c) 14 0x003965f7 (0x0032fd5c) 15 0x003308ed (0x0032fe6c) Пробовал запускать с отладкой по relay - ничего полезного не нашёл. > > При установке с eterhack с патчем 'kernel32: Fix Garant
> > 7.4.1 installation (eterbug #5345)' выдаётся сообщение о
> > том, что не удаётся найти файл garant.ini
> В какой бутылке? Я проверяю в бутылке
> prav/garant/7-4-1/local2. Там такого сообщения нет.
В чистой бутылке, созданной 1.0.12-eter5.5/7.
Попробовал установить Гарант с помощью eterwine с патчем 'kernel32: Fix Garant 7.4.1 installation (eterbug #5345)'. При установке данных выдаётся ошибка 'File DONGLE.DLL not found !' На eter-1.0.12 с патчем 'ntdll: Fix loading dlls packed with Molebox (eterbug #5552).' установка проходит по крайней мере до того места, где надо ввести отзыв на пароль. Дальше проверить пока не удалось, так как отзыв что-то не присылают :( На eter-1.0.12 с патчем 'Fix installing Garant 7.4.1 data (eterbug #5455).' и исправленной закрытой частью установка проходит нормально, если увеличить лимит на число доступных процессу файловых дескрипторов до 100000. Принято. WINE@Etersoft 1.0.12 eter5.6/eter8 Закрываю. |