Bug 5455

Summary: Установка данных Гарант 7.4.1
Product: WINE@Etersoft Reporter: Andrey Vusik <night>
Component: Установка программ / MSIAssignee: Александр Морозов <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
Не работает установка.
Comment 1 Виталий Перов 2010-04-15 18:54:14 MSD
Сделал патч, частично решающий багу (по баге #5345).
Программа устновки запускается, но ругается на garant.ini
Возможно установка прошла с ошибкой

Для проверки установки данных нужно попробовать либо взять нормальный garant.ini, либо скопировать установленный Гарант с винды
Comment 2 Andrey Vusik 2010-05-02 20:33:40 MSD
Запуск с Гаранта из Windows не происходит. 
Ругается на отсутствие GblAdapter.dll.
Аналогичное сообщение появляется и при запуске установки данных.
Comment 3 Andrey Vusik 2010-05-02 20:34:13 MSD
Created attachment 1681 [details]
Сообщение об ошибке
Comment 4 Виталий Перов 2010-05-05 17:05:18 MSD
При запуске в eterhack. Появляется сообщение:
"File DONGLE.DLL not found"

При трейсе по каналу file видно, что программа ищет и не находит lz32.dll
Comment 5 Виталий Перов 2010-05-05 17:33:22 MSD
скопировал 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
Comment 7 Виталий Перов 2010-05-06 16:59:24 MSD
Пробовал запускать через wwdbg. Исключения в процессе работы программы не возникают.
Comment 11 Виталий Перов 2010-05-13 15:26:33 MSD
При добавления отладочного сообщения в 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\ и есть та временная директория, куда распаковываются файлы

Comment 12 Виталий Перов 2010-05-13 15:41:48 MSD
Добавил трейс в функцию LoadLibraryA.
Лог перед ошибкой:
fixme:module:LoadLibraryA name='shlwapi.dll', ret=0x7e160000
fixme:module:LoadLibraryA name='.\dongle.dll', ret=0x0
Comment 13 Виталий Перов 2010-05-13 15:51:24 MSD
Добавил вывод текущей директории:

fixme:module:LoadLibraryA name='.\dongle.dll', ret=0x0
fixme:module:LoadLibraryA cur dir = 'C:\Program Files\Garant-Local\apps\winNT'

Положил в указанную директорию фиктивный dongle.dll.
Тест из баги #5571 показал, что в таком случае LoadLibrary успешно загружает файл. Но, файл не загружается!
Comment 14 Виталий Перов 2010-05-13 16:32:56 MSD
Добавил вызов GetFileAttributesA для проверки существования файла.
функция возвращает значение 1, что соответствует read-only.

У других аналогичных dll атрибуты равны 32 (FILE_ATTRIBUTE_ARCHIVE)

Пробовал принудительно выставить атрибуты 32 перед загрузкой - функция SetFileAttributesA возвращает успешное выполнение, но атрибуты не меняет.
Comment 16 Виталий Перов 2010-05-13 17:45:54 MSD
GetLastError возвращает 998, что соответствует ERROR_NOACCESS.

Трассировка LoadLibrary показала, что вызываемая load_library выполняется успешно, а следующая за ней process_attach возвращает ошибку
STATUS_ACCESS_VIOLATION
Comment 17 Виталий Перов 2010-05-13 18:17:48 MSD
функции 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 завершается с ошибкой.
Comment 18 Виталий Перов 2010-05-13 18:29:52 MSD
Проверил. haspms32.dll в папке есть (на момент загрузки dongle.dll)
Comment 19 Виталий Перов 2010-05-13 19:16:06 MSD
для haspms.dll выполняется process_attach для связанной с ней kernel32.dll.
Далее вызывается MODULE_InitDLL, которая и возвращает STATUS_ACCESS_VIOLATION
Comment 20 Виталий Перов 2010-05-13 20:07:06 MSD
При вызове call_dll_entry_point для файла haspms.dll происходит исключение. 
Отловить проблему пока не удаётся - исключение перехватывается, и отладчик не запускается
Comment 22 Виталий Перов 2010-05-17 17:51:13 MSD
функция MODULE_InitDLL в ntdll вызывает dll_entry_point, отлавливая исключения
При этом haspms32.dll падает.
Если в обработчике исключений принудительно возвращать status = STATUS_SUCCESS, то сообщение об отсутствующей dongle.dll не появляется.
Но в конце появляется диалог "Сохранить статус установки?"
Похоже, что данные всё-равно не устанавливаются
Comment 23 Виталий Перов 2010-05-17 18:29:57 MSD
Теперь возникает переполнение стека:
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

Притом установщик сам перехватывает исключения, где конкретно происходит падение посмотреть не удаётся.
Comment 24 Кирилл Марчук 2010-05-18 13:43:11 MSD
вижу работа кипит ;(( помогают ГАРАНТовские коллеги из Москвы или не очень ?

хотел от себя как от специалиста по ГАРАНТу добавить что установка ДАННЫХ не имеет ничего общего с "Установка программ  / MSI" 

вот. вдруг кому поможет. 
Comment 25 Виталий Перов 2010-05-19 17:11:03 MSD
Пробовал запрещать программе устанавливать свои обработчики прерываний при помощи функций:
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

Comment 26 Виталий Перов 2010-05-19 18:39:58 MSD
Попробовал посмотреть сообщения по каналу 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...

Comment 27 Александр Морозов 2010-05-20 21:58:50 MSD
При установке файлов данных Гаранта на текущем 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 не получится.
Comment 28 Виталий Перов 2010-05-24 17:05:12 MSD
(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. Там такого сообщения нет.

Comment 29 Виталий Перов 2010-05-24 17:12:12 MSD
Из гаранта прислали тестовые файлы 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 - ничего полезного не нашёл.
Comment 30 Александр Морозов 2010-05-24 18:39:24 MSD
> > При установке с eterhack с патчем 'kernel32: Fix Garant
> > 7.4.1 installation (eterbug #5345)' выдаётся сообщение о
> > том, что не удаётся найти файл garant.ini
> В какой бутылке? Я проверяю в бутылке
> prav/garant/7-4-1/local2. Там такого сообщения нет.

В чистой бутылке, созданной 1.0.12-eter5.5/7.
Comment 31 Александр Морозов 2010-05-24 19:20:44 MSD
Попробовал установить Гарант с помощью eterwine с патчем 'kernel32: Fix Garant 7.4.1 installation (eterbug #5345)'. При установке данных выдаётся ошибка 'File DONGLE.DLL not found !'
Comment 32 Александр Морозов 2010-05-25 20:12:24 MSD
На eter-1.0.12 с патчем 'ntdll: Fix loading dlls packed with Molebox (eterbug #5552).' установка проходит по крайней мере до того места, где надо ввести отзыв на пароль. Дальше проверить пока не удалось, так как отзыв что-то не присылают :(
Comment 33 Александр Морозов 2010-05-26 17:41:40 MSD
На eter-1.0.12 с патчем 'Fix installing Garant 7.4.1 data (eterbug #5455).' и исправленной закрытой частью установка проходит нормально, если увеличить лимит на число доступных процессу файловых дескрипторов до 100000.
Comment 34 Денис Баранов 2010-05-27 18:12:04 MSD
Принято.
WINE@Etersoft 1.0.12 eter5.6/eter8
Comment 35 Andrey Vusik 2010-05-28 15:58:29 MSD
Закрываю.