Bug 7864

Summary: Установка M.E.Doc
Product: WINE@Etersoft Reporter: Константин Кондратюк <kondratyuk>
Component: Установка программ / MSIAssignee: BUGS@Etersoft <bugs>
Status: DEFERRED --- QA Contact:
Severity: normal    
Priority: P4 CC: amorozov, dm, dtimoshkov, kondratyuk, lav, pletnov, vit61
Version: 2.1   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 9061    
Bug Blocks: 7822, 8479    

Description Константин Кондратюк 2011-11-10 09:13:06 MSK
Установка программы включает в себя установку .NET, VFP Ole Provider (eterbug #7823) и собственно программы.
Comment 1 Константин Кондратюк 2011-11-10 09:17:41 MSK
На свежем eterhack (1.3.32/2.0.0-eter1.2/1) установка падает с ошибкой:
wine: Call from 0x7b83a906 to unimplemented function apphelp.dll.ApphelpCheckInstallShieldPackage, aborting
wine: Unimplemented function apphelp.dll.ApphelpCheckInstallShieldPackage called at address 0x7b83a906 (thread 002f), starting debugger...

Примечательно, что на более старой версии (1.3.30-alt0) такая ошибка не возникает - там виснет на msi или падает с ошибкой в обработке XML.
Comment 2 Константин Кондратюк 2011-11-10 09:24:59 MSK
Сделал бутылку на eterhack: ukraine/medoc
В корне диска c: лежит установщик программы и отдельно - олепровайдер. На данный момент без патча к msi установка зацикливается на установке провайдера.

WINE@Etersoft 1.0 SQL 1.3.30/1.7.1-eter1.9/4
Comment 3 Роман Дадьков 2011-11-22 22:36:38 MSK
а что ставится сначала, олепровайдер или экзешник?
Comment 4 Константин Кондратюк 2012-01-17 10:05:39 MSK
Забыл ещё уточнить про ошибку XML.

На чистом WINE@Etersoft появляется ошибка в консоли:
err:ole:apartment_getclassobject DllGetClassObject returned error 0x80040111
err:ole:CoGetClassObject no class object {88d96a05-f192-11d4-a65f-0040963251e5} could be created for context 0x1

Класс относится к msxml6, после установки через winetricks msxml6 сообщение перестаёт появляться, но проблему это не решает.

Сообщение об ошибке: Непредвиденная ошибка при обновлении файлов XML. Ошибка: -2002
Comment 5 Роман Дадьков 2012-02-10 21:45:20 MSK
установка завершается на Сообщение об ошибке: Непредвиденная ошибка при обновлении файлов XML. Ошибка:
-2002
но в консоли последнее что сыпется:
fixme:shell:IShellLinkA_fnGetPath (0x1da50d0): WIN32_FIND_DATA is not yet filled.
fixme:shell:IShellLinkA_fnGetPath (0x1da50d0): WIN32_FIND_DATA is not yet filled.
winedebug=+ole дал
trace:ole:ClientRpcChannelBuffer_SendReceive -- 0x00000000
trace:ole:NdrProxyFreeBuffer (0x1f226c,0x3093e0)
trace:ole:ClientRpcChannelBuffer_FreeBuffer (0x3093b4)
trace:ole:NdrCStdStubBuffer2_Release (0x1f0ea0)->Release()
trace:ole:ClientRpcChannelBuffer_FreeBuffer -- 0
Comment 6 Роман Дадьков 2012-02-11 21:28:26 MSK
посмотрел старые баги по xml в большинстве случаев проблема была с версиями.
winedebug по msxml ничего не дал.
сделал winedebug relay.
Comment 7 Роман Дадьков 2012-02-17 18:36:34 MSK
при установке в установочной директории было обнаружено, что файла ezvit.exe.config, к которому шло обращение не за долго до возникновения ошибки, нет.
теперь возникла неясная ситуация. установка происходит до определенного момента, но файлы в директории, куда идет установка не создаются.
Comment 8 Роман Дадьков 2012-02-17 19:57:21 MSK
рабочая версия сейчас такая.
о время установки по непонятным причинам вайну не удается создать файл ezvit.exe.config. 
затем при обращении к нему возникает ошибка и все падает
Comment 9 Роман Дадьков 2012-02-22 18:43:15 MSK
перед самым зависанием генерируются предупреждения.
warn:module:alloc_module disabling no-exec because of L"msxml6.dll"
...
warn:urlmon:ServiceProvider_QueryService unknown service {79eac9e4-baf9-11ce-8c82-00aa004ba90b}
warn:urlmon:FileProtocol_QueryInterface not supported interface {79eac9d6-bafa-11ce-8c82-00aa004ba90b}
warn:urlmon:FileProtocol_QueryInterface not supported interface {79eac9d8-bafa-11ce-8c82-00aa004ba90b}
видимо после установки msxml6 все равно работа с xml не происходит
Comment 10 Роман Дадьков 2012-02-22 21:29:04 MSK
добавил два интерфейса в FileProtocol. не помогло.
Comment 11 Роман Дадьков 2012-02-23 20:27:55 MSK
79eac9e4-baf9-11ce-8c82-00aa004ba90b относится к gopher протоколу, который должен быть в ie6. ie6 установлен, пока непонятно почему возникает предупреждение
Comment 12 Роман Дадьков 2012-03-01 22:43:46 MSK
нужно попытаться узнать, кто пытается выделить так много памяти
warn:heap:allocate_large_block Could not allocate block for feeefef4 bytes
Comment 13 Роман Дадьков 2012-03-08 22:43:41 MSK
работаю над багой
Comment 14 Роман Дадьков 2012-04-05 22:17:26 MSK
работаю над багой
Comment 15 Роман Дадьков 2012-04-06 22:18:49 MSK
видимо, проблема с выделением памяти не являлась причиной ошибки.
Comment 16 Роман Дадьков 2012-04-11 21:30:43 MSK
все-таки дело в проблеме выделения памяти. попытка выделить память в функции RtlAllocateHeap портит установку.
Comment 17 Роман Дадьков 2012-04-12 23:43:48 MSK
размер выделяемого блока рассчитывается в wine_nt_to_unix_file_name.
проверил размер блока, он не такой который пытается выделить allocate_large_block в RtlAllocateHeap.
тут два варианта, либо это значение неправильно преобразуется при передаче, либо RtlAllocateHeap вызывается другой функцией.
Comment 18 Роман Дадьков 2012-04-21 20:31:02 MSK
видимо, MEDoc не следит, за тем сколько ему памяти предоставлено. 
ограничение размера на блок выделяемой памяти помогло, но частично.
Comment 19 Роман Дадьков 2012-04-27 19:49:39 MSK
было 
if (rounded_size >= HEAP_MIN_LARGE_BLOCK_SIZE && (flags & HEAP_GROWABLE))
стало
if (rounded_size >= HEAP_MIN_LARGE_BLOCK_SIZE && (flags & HEAP_GROWABLE) && rounded_size <= HEAP_MAX_LARGE_BLOCK_SIZE)
ошибка не воспроизводится 
размер HEAP_MAX_LARGE_BLOCK_SIZE установлен 0xff000
Comment 20 Константин Кондратюк 2012-04-27 19:59:02 MSK
Fixed?
Comment 21 Роман Дадьков 2012-04-28 05:08:29 MSK
проблемная функция RtlAllocateHeap вызывается из SysAllocStringByteLen.
запрашиваемый размер превышает максимальный, указанный в описании функции.
поправил проверку на размер выделяемой памяти
стало: if (len >= (INT_MAX-sizeof(WCHAR)-sizeof(DWORD)))
предупреждение о неудачном выделении памяти перестало выводиться, однако ошибка
сохраняется.
Comment 22 Роман Дадьков 2012-05-04 14:14:54 MSK
Backtrace:
=>0 0x7bc48a8f allocate_large_block+0xe5(heap=0x110000, flags=0x50000062, size=0xfeeefef4) [/srv/romand/Projects/eterhack20/dlls/ntdll/heap.c:723] in ntdll (0x00318cb4)
  1 0x7bc4ba1c RtlAllocateHeap+0x13a(heap=0x110000, flags=0x50000062, size=0xfeeefef4) [/srv/romand/Projects/eterhack20/dlls/ntdll/heap.c:1682] in ntdll (0x00318d34)
  2 0x7e2c55a8 SysAllocStringByteLen+0x57(str="ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■И", len=0xfeeefeee) [/home/romand/Projects/eterhack20/dlls/oleaut32/oleaut.c:356] in oleaut32 (0x00318d74)
  3 0x7e3057da VariantCopy+0x289(pvargDest=0x318e50, pvargSrc=0x318f1c) [/home/romand/Projects/eterhack20/dlls/oleaut32/variant.c:781] in oleaut32 (0x00318df4)
Comment 23 Роман Дадьков 2012-05-04 18:21:55 MSK
при запуске без winedebug не запрашивается чрезмерно больших блоков, поэтому возвращаемые параметры вполне разумные 
FIXME("(%p,%08x,%08lx): returning %p\n", heap, flags, size, ret );
fixme:heap:RtlAllocateHeap (0x110000,00000002,013dc0d6): returning 0xb120020

Backtrace показывает, что передаваемая строка пустая, возможно, что именно в этом как раз и проблема.
Backtrace:
=>0 0x7bc4bb6b RtlAllocateHeap+0x232(heap=0x110000, flags=0x2, size=0x13dc0d6) [/srv/romand/Projects/eterhack20/dlls/ntdll/heap.c:1688] in ntdll (0x00308d30)
  1 0x7e2c95a8 SysAllocStringByteLen+0x57(str="", len=0x13dc0d0) [/home/romand/Projects/eterhack20/dlls/oleaut32/oleaut.c:356] in oleaut32 (0x00308d70)
  2 0x7e3097da VariantCopy+0x289(pvargDest=0x308e4c, pvargSrc=0x308f18) [/home/romand/Projects/eterhack20/dlls/oleaut32/variant.c:781] in oleaut32 (0x00308df0)
Wine-dbg>Ctrl-C: stopping debuggee
Comment 24 Роман Дадьков 2012-05-04 20:26:06 MSK
судя по адресу функция вызывающая VariantCopy в xmlrt

a420000- a45c000	Export          xmlrt
Comment 25 Роман Дадьков 2012-05-18 16:30:18 MSK
в VariantCopy, в случае, если адрес возврата совпадает с 0xa424fef, используется другая функция выделения памяти - SysAllocString.
отправил патч на wine-patches@
Comment 27 Роман Дадьков 2012-05-18 20:03:11 MSK
добавил проверку имени вызывающего файла.
прикладывается к eterhack и eter-2.0
отправил патч на wine-patches@
Comment 28 Svetlana Zhukova 2012-05-19 12:54:27 MSK
Проверять пока рано, но скачала демо-версию сюда:
/Windows/DataBase Otchyoty Slovary/M.E.Doc
Comment 29 Svetlana Zhukova 2012-05-21 14:10:00 MSK
wine@eter-2 bottle bugs/7864
WINE@Etersoft SQL 2.0.1-eter10/6

Программа запускается отсюда:
c:/users/Public/Application Data/Medoc/Medoc/ezvit.exe 

Устанавливается все,что положено, но программа не запускается. В консоли несколько fixme...
wine: Install Mono for Windows to run .NET 2.0 applications.

В windows работает.
Comment 30 Svetlana Zhukova 2012-05-21 14:13:06 MSK
Эту закрываю, по запуску бага 8479
Comment 32 Svetlana Zhukova 2012-05-21 14:34:56 MSK
Согласна,рано приняла.
Comment 33 Роман Дадьков 2012-05-22 15:56:17 MSK
как выяснилось. medoc требует .net
поставил через winetricks msxml6 и dotnet20 - на wwo установка прошла успешно, без каких-либо ошибок. при попытке запустить medoc выдает ошибку.
при установке через ww с корявым хаком и установленным msxml, утсановка также прошла успешно, при попытке запустить просит Windows version of Mono. поставил mono210. при попытке запустить medoc падает.
Comment 34 Александр Морозов 2012-05-22 16:11:19 MSK
> при установке через ww с корявым хаком и установленным msxml, утсановка также
> прошла успешно

А без хака ставится? Если нет, то можно попробовать найти приводящий к проблеме коммит.
Comment 35 Роман Дадьков 2012-05-24 15:50:52 MSK
устанавливается и через eterhack и ww, если через winetricks поставить или dotnet20 или mono210.
после установки не запускается ни в первом, ни во втором случае.
с хаком устанавливается без winetricks, но после установки так же не запускается.
Comment 36 Dmitry Timoshkov 2012-05-24 16:18:13 MSK
Спрошу еще раз: Работает ли установка с 'oleaut32=n'?
Comment 37 Роман Дадьков 2012-05-25 18:38:27 MSK
нет. не работает
Comment 38 Роман Дадьков 2012-05-25 18:38:47 MSK
при запуске
trace:advapi:CheckTokenMembership Groups[6]: {0xc0000007, S-1-5-5-0-1}
fixme:imm:ImmDisableIME (-1): stub
fixme:heap:HeapSetInformation 0x110000 1 (nil) 0
fixme:heap:HeapSetInformation 0x110000 1 (nil) 0
fixme:thread:NtQueryInformationThread Cannot get kerneltime or usertime of other threads
fixme:thread:NtQueryInformationThread info class 9 not supported yet
trace:thread:NtQueryInformationThread Cannot get kerneltime or usertime of other threads
.......
fixme:advapi:RegisterEventSourceW ((null),L".NET Runtime 2.0 Error Reporting"): stub
fixme:advapi:ReportEventW (0xcafe4242,0x0001,0x0000,0x00001388,(nil),0x000b,0x000000e2,0x3009a1b4,0x6ec5f4): stub
err:eventlog:ReportEventW L"clr20r3"
..........
err:eventlog:ReportEventW L"system.componentmodel.win32"
err:eventlog:ReportEventW L"NIL"
fixme:advapi:DeregisterEventSource (0xcafe4242) stub
Comment 40 Роман Дадьков 2012-07-25 21:13:52 MSK
в бутылке с установленным msxml6 и dotnet20 medoc устанавливается.
по запуску бага 8479
Comment 41 Роман Дадьков 2012-07-25 21:24:15 MSK
на eterhack version 1.7.10.5 с msxml6 и патчами 
1 ntdll : add ThreadQuerySetWin32StartAddress in NtQueryInformationThread
2 mpr/tests : Сheck the return values of the WNetGetUniversalNameA
3 mpr : Fix WNetGetUniversalNameA (eterbug #3766)
установка проходит нормально (не падает), но вконце все равно просить установки mono либо dotnet.
для запуска medoc ставить mono либо dotnet все равно придется.
Comment 42 Svetlana Zhukova 2012-08-17 14:53:16 MSK
Сделала нову бутылку, через winetricks запустила установку dotnet11,которая повлекла за собой установку .net framework 1.1

В процессе установки MEDoc появилось сообщение о том,что необходимо установить версию .net framework не ниже 2.0.50727
Нажимаю ОК,установка программы заканчивается нормально,но при запуске ,естественно, ей недостает .net framework 2.0.50727.

.net framework 2.0.50727 была вызвана запуском dotnet35,но во время установки произошло падение (скорее всего потому,что версия 2.0 некорректно устанавливалась поверх 1.0)

Сделала заново бутылку wine@eter-2 bottle bugs/7864-1
WINE@Etersoft SQL 2.0.2-eter14/3
.net framework 2.0.50727 установился корректно.

Обновила локальный git. ( в testing  eter-13/4)
в git WINE@Etersoft SQL 1.5.10/2.0.2-eter7/1

Все патчи,кроме первого в комментарии 41 оказались не приложенными.
Comment 43 Svetlana Zhukova 2012-08-17 15:21:14 MSK
Попыталась приложить патчи вручную (командой git am), но они не приложились.
Comment 45 Svetlana Zhukova 2012-08-21 16:56:44 MSK
Приложила патч 0001-mpr-Fix-WNetGetUniversalNameA-W-eterbug-7864.patch , пересобрала. WINE@Etersoft SQL 1.5.10/2.0.2-eter8/1
Сделала новую бутылку bugs/7864-1 , установила в winetricks  - dotnet20.
В конце установки проявилась ошибка (upates..), но на запуск программы она не повлияла.
В vbox на windows Sv. Скопировала дистрибутив,при установке приложение подвисло. Проверю чуть позднее.
Comment 46 Svetlana Zhukova 2012-08-21 23:03:09 MSK
НА Windows ошибки нет. В тот момент,когда в wine появляется ошибка, в windows происходит обновление БД.  Запуск программы одинаково проходит в обеих системах.
Comment 47 Роман Дадьков 2012-08-22 13:26:57 MSK
(В ответ на comment #45)
> Приложила патч 0001-mpr-Fix-WNetGetUniversalNameA-W-eterbug-7864.patch ,
> пересобрала. WINE@Etersoft SQL 1.5.10/2.0.2-eter8/1
> Сделала новую бутылку bugs/7864-1 , установила в winetricks  - dotnet20.
в баге писалось, что нужно msxml6 еще поставить. был установлен?
никаких предупреждений не появляется, ни во время установки, ни во время запуска. 
нужно проверить, работает ли MEDoc, то есть выполняет ли он то, для чего нужен.
Comment 48 Денис Баранов 2012-11-17 16:08:05 MSK
На каком этапе бага застряла?
Comment 49 Роман Дадьков 2012-11-17 16:25:17 MSK
(В ответ на comment #48)
> На каком этапе бага застряла?

Она решена, патчи есть. Не были приложены. Правда, скорее всего, они уже устарели, но обновить их не проблема.
Comment 50 Денис Баранов 2012-11-17 16:40:55 MSK
(В ответ на comment #49)
> Она решена, патчи есть. Не были приложены. Правда, скорее всего, они уже
> устарели, но обновить их не проблема.

Если решена, значит надо статус сменить и передать тестировщикам.
Comment 51 Роман Дадьков 2013-01-23 16:34:35 MSK
Отправил патч на wine-patches@.
Работает теперь и на wine-2.0.0
Устанавливаем сначала msxml6, mono210 (или dotnet20), затем уже устанавливается M.E.Doc
Comment 52 Роман Дадьков 2013-01-23 16:35:32 MSK
Исправлено в eterhack и eter-2.0.0
Comment 53 Роман Дадьков 2013-01-28 14:34:02 MSK
Патч ntdll: Add ThreadQuerySetWin32StartAddress in NtQueryInformationThread. (eterbug #7864). Приложен к eter-2.0.
Comment 54 Svetlana Zhukova 2013-01-31 12:47:43 MSK
wine@eter-2 bottle bugs/7864
WINE@Etersoft SQL 2.0.3-eter22/5

При установке программы(примерно на стадии,когда .NET Framework завершал установку) в консли посыпалось:
err:richedit:ReadStyleSheet skipping optional destination
Затем - на стадии про Access:
err:rpc:I_RpcGetBuffer no binding

В конце,на этапе установления обновлений (один з этапов установкипрограммы) появилось окошко с ошибкой:
System Null.ReferenceExteption.object reference not set to an enstance of an object

Нашла это:http://www.gotdotnet.ru/blogs/unknownexception/10734/

В ошибке нажала ОК,стадия завершения обновлений так и не закончилась.
При таком положении дел программы при запуске падает.
Comment 55 Роман Дадьков 2013-02-04 19:12:33 MSK
(В ответ на comment #54)
> wine@eter-2 bottle bugs/7864
> WINE@Etersoft SQL 2.0.3-eter22/5
Делаем для версии 2.1.
Comment 56 Svetlana Zhukova 2013-02-06 14:33:05 MSK
wine@eter-2 bottle MEDoc/MEDok
WINE@Etersoft SQL 2.1.0-eter3/1


$ winetricks
------------------------------------------------------
wine cmd.exe /c echo '%ProgramFiles%' returned empty string
------------------------------------------------------
Создаю багу.
Comment 57 Svetlana Zhukova 2013-02-08 14:41:43 MSK
swine -h eter-2.1 MEDoc/MEDoc --force

При установке msxml6:
err:richedit:ReadStyleSheet skipping optional destination

При установке .net framework
err:rpc:I_RpcGetBuffer no binding
err:rpc:I_RpcGetBuffer no binding
fixme:advapi:GetNamedSecurityInfoW Object type 2 is not currently supported.
err:msi:ACTION_CallDllFunction Custom action (L"C:\\users\\wine\\Temp\\msid1a0.tmp":L"ExecSecureObjects") caused a page fault: c0000005

Ошибка :
System Null.ReferenceExteption.object reference not set to an enstance of an
object
сохраняется.
Comment 58 Роман Дадьков 2013-02-11 19:34:52 MSK
Написал тест для NtQueryInformationThread. Ее вызов приводит к возникновению исключений. РАзница между адресами entry_point и teb составляет 0x7000 во всех запусках.
Возможно, что имея доступ к TEB, можно по смещению 0x30 получить доступ к PEB, а уже из него получить указатель на start routine и не портить протокол.
http://en.wikipedia.org/wiki/Win32_Thread_Information_Block
http://en.wikipedia.org/wiki/Process_Environment_Block
Comment 64 Роман Дадьков 2013-02-12 13:48:10 MSK
Откатил хаки:
ntdll : add ThreadQuerySetWin32StartAddress in NtQueryInformationThread
oleaut32 : installation of M.E.Doc (eterbug #7864)
Установка работает на eterhack и eter-2.1.
Бага по запуску MEDoc https://bugs.etersoft.ru/show_bug.cgi?id=8479
Comment 65 Svetlana Zhukova 2013-04-17 12:10:29 MSK
Заново. 
Установила mono 210.

При установке MEDoc на стадии загрузки обновлений возникает ошибка:
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
  at update.Program.Main (System.String[] args) [0x00000] in <filename unknown>:
[System.NullReferenceException: не задана ссылка на экземпляр объекта.]

Не смотря на это,установка завершается предложением запустить программу.
Программа по-прежнему не запускается (бага 8479)

На windows такой ошибки не возникает,после соглашения с запуском программы полявляется окошко с предложением ввести логин.пароль.
Comment 66 Svetlana Zhukova 2013-04-17 12:11:49 MSK
(В ответ на comment #65)
swine -h eter-2.1  MEDoc/MEDoc
WINE@Etersoft SQL 2.1.2/2.1.0-eter8/3