Summary: | Установка M.E.Doc | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Константин Кондратюк <kondratyuk> |
Component: | Установка программ / MSI | Assignee: | 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
На свежем 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. Сделал бутылку на eterhack: ukraine/medoc В корне диска c: лежит установщик программы и отдельно - олепровайдер. На данный момент без патча к msi установка зацикливается на установке провайдера. WINE@Etersoft 1.0 SQL 1.3.30/1.7.1-eter1.9/4 а что ставится сначала, олепровайдер или экзешник? Забыл ещё уточнить про ошибку 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 установка завершается на Сообщение об ошибке: Непредвиденная ошибка при обновлении файлов 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 посмотрел старые баги по xml в большинстве случаев проблема была с версиями. winedebug по msxml ничего не дал. сделал winedebug relay. при установке в установочной директории было обнаружено, что файла ezvit.exe.config, к которому шло обращение не за долго до возникновения ошибки, нет. теперь возникла неясная ситуация. установка происходит до определенного момента, но файлы в директории, куда идет установка не создаются. рабочая версия сейчас такая. о время установки по непонятным причинам вайну не удается создать файл ezvit.exe.config. затем при обращении к нему возникает ошибка и все падает перед самым зависанием генерируются предупреждения. 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 не происходит добавил два интерфейса в FileProtocol. не помогло. 79eac9e4-baf9-11ce-8c82-00aa004ba90b относится к gopher протоколу, который должен быть в ie6. ie6 установлен, пока непонятно почему возникает предупреждение нужно попытаться узнать, кто пытается выделить так много памяти warn:heap:allocate_large_block Could not allocate block for feeefef4 bytes работаю над багой работаю над багой видимо, проблема с выделением памяти не являлась причиной ошибки. все-таки дело в проблеме выделения памяти. попытка выделить память в функции RtlAllocateHeap портит установку. размер выделяемого блока рассчитывается в wine_nt_to_unix_file_name. проверил размер блока, он не такой который пытается выделить allocate_large_block в RtlAllocateHeap. тут два варианта, либо это значение неправильно преобразуется при передаче, либо RtlAllocateHeap вызывается другой функцией. видимо, MEDoc не следит, за тем сколько ему памяти предоставлено. ограничение размера на блок выделяемой памяти помогло, но частично. было 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 Fixed? проблемная функция RtlAllocateHeap вызывается из SysAllocStringByteLen. запрашиваемый размер превышает максимальный, указанный в описании функции. поправил проверку на размер выделяемой памяти стало: if (len >= (INT_MAX-sizeof(WCHAR)-sizeof(DWORD))) предупреждение о неудачном выделении памяти перестало выводиться, однако ошибка сохраняется. 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) при запуске без 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 судя по адресу функция вызывающая VariantCopy в xmlrt a420000- a45c000 Export xmlrt в VariantCopy, в случае, если адрес возврата совпадает с 0xa424fef, используется другая функция выделения памяти - SysAllocString. отправил патч на wine-patches@ добавил проверку имени вызывающего файла. прикладывается к eterhack и eter-2.0 отправил патч на wine-patches@ Проверять пока рано, но скачала демо-версию сюда: /Windows/DataBase Otchyoty Slovary/M.E.Doc 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 работает. Эту закрываю, по запуску бага 8479 Согласна,рано приняла. как выяснилось. medoc требует .net поставил через winetricks msxml6 и dotnet20 - на wwo установка прошла успешно, без каких-либо ошибок. при попытке запустить medoc выдает ошибку. при установке через ww с корявым хаком и установленным msxml, утсановка также прошла успешно, при попытке запустить просит Windows version of Mono. поставил mono210. при попытке запустить medoc падает. > при установке через ww с корявым хаком и установленным msxml, утсановка также
> прошла успешно
А без хака ставится? Если нет, то можно попробовать найти приводящий к проблеме коммит.
устанавливается и через eterhack и ww, если через winetricks поставить или dotnet20 или mono210. после установки не запускается ни в первом, ни во втором случае. с хаком устанавливается без winetricks, но после установки так же не запускается. Спрошу еще раз: Работает ли установка с 'oleaut32=n'? нет. не работает при запуске 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 в бутылке с установленным msxml6 и dotnet20 medoc устанавливается. по запуску бага 8479 на 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 все равно придется. Сделала нову бутылку, через 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 оказались не приложенными. Попыталась приложить патчи вручную (командой git am), но они не приложились. Приложила патч 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. Скопировала дистрибутив,при установке приложение подвисло. Проверю чуть позднее. НА Windows ошибки нет. В тот момент,когда в wine появляется ошибка, в windows происходит обновление БД. Запуск программы одинаково проходит в обеих системах. (В ответ на 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) > На каком этапе бага застряла? Она решена, патчи есть. Не были приложены. Правда, скорее всего, они уже устарели, но обновить их не проблема. (В ответ на comment #49) > Она решена, патчи есть. Не были приложены. Правда, скорее всего, они уже > устарели, но обновить их не проблема. Если решена, значит надо статус сменить и передать тестировщикам. Отправил патч на wine-patches@. Работает теперь и на wine-2.0.0 Устанавливаем сначала msxml6, mono210 (или dotnet20), затем уже устанавливается M.E.Doc Исправлено в eterhack и eter-2.0.0 Патч ntdll: Add ThreadQuerySetWin32StartAddress in NtQueryInformationThread. (eterbug #7864). Приложен к eter-2.0. 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 #54) > wine@eter-2 bottle bugs/7864 > WINE@Etersoft SQL 2.0.3-eter22/5 Делаем для версии 2.1. wine@eter-2 bottle MEDoc/MEDok WINE@Etersoft SQL 2.1.0-eter3/1 $ winetricks ------------------------------------------------------ wine cmd.exe /c echo '%ProgramFiles%' returned empty string ------------------------------------------------------ Создаю багу. 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 сохраняется. Написал тест для 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 Откатил хаки: 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 Заново. Установила 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 #65) swine -h eter-2.1 MEDoc/MEDoc WINE@Etersoft SQL 2.1.2/2.1.0-eter8/3 |