Summary: | Установка Fine Reader 9.0 падает | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Sergey Lebedev <lebedev.v.sergey> |
Component: | Установка программ / MSI | Assignee: | Svetlana Zhukova <svzhu> |
Status: | CLOSED FIXED | QA Contact: | Svetlana Zhukova <svzhu> |
Severity: | normal | ||
Priority: | P4 | CC: | amorozov, goga, kondratyuk, lav, olezha, sam, vitperov |
Version: | 1.0.7 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | 13614 | Связано с: | 2658 |
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 1037, 1838, 2666, 3000, 3244, 5618, 8900 | ||
Attachments: |
Зарегестированный сервис на винде
Дерево действий установки |
Description
Sergey Lebedev
2007-10-22 19:35:02 MSD
Если поставить iexplore, то установка проходит. Проблема в том, что после установки fr9 не работает - когда запускаешь его - молчит. Не виснет, а как будто выполнился уже. конец июля, минимум. Не занимаюсь. Сейчас: fixme:msi:ITERATE_InstallService Dependency list unhandled! fixme:ntdll:NtLockFile I/O completion on lock not implemented yet fixme:ntdll:NtLockFile I/O completion on lock not implemented yet fixme:ntdll:NtLockFile I/O completion on lock not implemented yet wine: Unhandled exception 0x000006ba at address 0x7b8428e0 (thread 0033), starting debugger... <...> Backtrace: =>1 0x7b842962 RaiseException+0x82() in kernel32 (0x7e09fd64) 2 0x7e787365 RpcRaiseException+0x35() in rpcrt4 (0x7e09fd84) 3 0x7e75bc7a in rpcrt4 (+0xbc7a) (0x7e09fdb4) 4 0x7e773781 NdrClientCall2+0x361() in rpcrt4 (0x7e0a03d4) 5 0x100fefd4 in msi7b34.tmp (+0xfefd4) (0x00a56794) В текущем ww получаю ко всему ещё и: err:rpc:I_RpcReceive we got fault packet with status 0x3e6 err:msi:ITERATE_InstallService Failed to create service L"ABBYY.Licensing.FineReader.Professional.9.0": 998 winexp в новой сборке (с новым окружением) fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut err:msi:ITERATE_InstallService Failed to open the SC Manager! fixme:ntdll:NtLockFile I/O completion on lock not implemented yet fixme:ntdll:NtLockFile I/O completion on lock not implemented yet fixme:ntdll:NtLockFile I/O completion on lock not implemented yet wine: Unhandled exception 0x000006ba at address 0x7b842960 (thread 0032), starting debugger... Backtrace: =>1 0x7b84319a RaiseException+0x82(code=0x6ba, flags=0x0, nbargs=0x0, args=0x0) [/srv/kondratyuk/Projects/wine/dlls/kernel32/except.c:84] in kernel32 (0x7e195df4) 2 0x7ea6a783 RpcRaiseException+0x22(exception=0x6ba) [/srv/kondratyuk/Projects/wine/dlls/rpcrt4/rpcrt4_main.c:185] in rpcrt4 (0x7e195e24) 3 0x7ea3dab3 NdrGetBuffer+0x99(stubmsg=0x7e196284, buflen=0xb0, handle=0x74ffa0) [/srv/kondratyuk/Projects/wine/dlls/rpcrt4/ndr_clientserver.c:175] in rpcrt4 (0x7e195e54) 4 0x7ea55982 NdrClientCall2+0x918(pStubDesc=0x10150bc8, pFormat=0x101508c6) [/srv/kondratyuk/Projects/wine/dlls/rpcrt4/ndr_stubless.c:766] in rpcrt4 (0x7e196504) программа не запускается. сборка: libwine-1.0.9-alt0.M41.36 libwine-gl-1.0.9-alt0.M41.36 wine-etersoft-sql-1.0.9-alt14 wine-1.0.9-alt0.M41.36 в конце установки: Register dump: CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b EIP:7b842cf2 ESP:7e0c7d00 EBP:7e0c7d64 EFLAGS:00000246( - 00 - IZP1) EAX:7b82c8c5 EBX:7b8b3c1c ECX:00000000 EDX:00000000 ESI:7e0c8208 EDI:00165e70 Stack dump: 0x7e0c7d00: 7e0c7d44 0081ecee 7e9bafa4 000006df 0x7e0c7d10: 000006ba 00000000 00000000 7b842c70 0x7e0c7d20: 00000000 00000002 7e9bafa4 7e0c8394 0x7e0c7d30: 000006ba 7e0c7d54 7e9aaa46 00110000 0x7e0c7d40: 00000000 00875ab0 7e9bafa4 7e0c8394 0x7e0c7d50: 00000000 7e0c7d84 7e9a01ad 00875ab0 Backtrace: =>1 0x7b842cf2 RaiseException+0x82() in kernel32 (0x7e0c7d64) 2 0x7e9aa705 RpcRaiseException+0x35() in rpcrt4 (0x7e0c7d84) 3 0x7e97ce8a in rpcrt4 (+0xce8a) (0x7e0c7db4) 4 0x7e9964b1 NdrClientCall2+0x361() in rpcrt4 (0x7e0c83d4) 5 0x100fefd4 in msi439a.tmp (+0xfefd4) (0x00b66794) 6 0x006c006c (0x00650063) 7 0x6f004d02 (0x45535500) 8 0x00000000 (0x00000000) Backtrace: =>1 0x7b842cf2 RaiseException+0x82() in kernel32 (0x7e0c7d64) 2 0x7e9aa705 RpcRaiseException+0x35() in rpcrt4 (0x7e0c7d84) 3 0x7e97ce8a in rpcrt4 (+0xce8a) (0x7e0c7db4) 4 0x7e9964b1 NdrClientCall2+0x361() in rpcrt4 (0x7e0c83d4) 5 0x100fefd4 in msi439a.tmp (+0xfefd4) (0x00b66794) 6 0x006c006c (0x00650063) 7 0x6f004d02 (0x45535500) 8 0x00000000 (0x00000000) err:rpc:RpcRaiseException handler continued execution Backtrace: вставил два раза зачем-то. И приведённая информация повторяет комментарий 7, так что лучше было сразу написать, что падает с той же ошибкой, что и прежде, и всё. Ошибка происходит не в том же самом потоке, что и поток установки. Но в потоке установки строго точно отрабатывается точка, которую показывает этот бэктрейс: =>1 0x7ee206d9 ITERATE_InstallService+0x47b(rec=0x73ba70, param=0x15abf8) [/srv/mibori/Projects/wine/dlls/msi/action.c:4647] in msi (0x0033f7e8) 2 0x7ee5d50a MSI_IterateRecords+0x98(view=0x7374e0, count=(nil), func=0x7ee2025e, param=0x15abf8) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033f818) 3 0x7ee20785 ACTION_InstallServices+0x67(package=0x15abf8) [/srv/mibori/Projects/wine/dlls/msi/action.c:4669] in msi (0x0033f848) 4 0x7ee24c11 ACTION_HandleStandardAction+0x161(package=0x15abf8, action=0x72a718, rc=0x33f8c0, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:6457] in msi (0x0033f888) 5 0x7ee172ee ACTION_PerformAction+0x91(package=0x15abf8, action=0x72a718, script=0, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:1032] in msi (0x0033f8c8) 6 0x7ee18e37 execute_script+0x17a(package=0x15abf8, script=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:1671] in msi (0x0033f928) 7 0x7ee1f73d ACTION_InstallExecute+0x19(package=0x15abf8) [/srv/mibori/Projects/wine/dlls/msi/action.c:4214] in msi (0x0033f938) 8 0x7ee1f98c ACTION_InstallFinalize+0x3a(package=0x15abf8) [/srv/mibori/Projects/wine/dlls/msi/action.c:4295] in msi (0x0033f968) 9 0x7ee24c11 ACTION_HandleStandardAction+0x161(package=0x15abf8, action=0x194ea8, rc=0x33f9e0, force=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:6457] in msi (0x0033f9a8) 10 0x7ee172ee ACTION_PerformAction+0x91(package=0x15abf8, action=0x194ea8, script=4294967295, force=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:1032] in msi (0x0033f9e8) 11 0x7ee16dec ITERATE_Actions+0x16a(row=0x16e920, param=0x33fa9c) [/srv/mibori/Projects/wine/dlls/msi/action.c:863] in msi (0x0033fa48) 12 0x7ee5d50a MSI_IterateRecords+0x98(view=0x1023468, count=(nil), func=0x7ee16c82, param=0x33fa9c) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033fa78) 13 0x7ee1711b ACTION_ProcessExecSequence+0x18c(package=0x15abf8, UIran=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:961] in msi (0x0033fac8) 14 0x7ee1feec ACTION_ExecuteAction+0x2e(package=0x15abf8) [/srv/mibori/Projects/wine/dlls/msi/action.c:4471] in msi (0x0033fae8) 15 0x7ee24c11 ACTION_HandleStandardAction+0x161(package=0x15abf8, action=0x161e58, rc=0x33fb60, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:6457] in msi (0x0033fb28) 16 0x7ee17428 ACTION_PerformUIAction+0x99(package=0x15abf8, action=0x161e58, script=4294967295) [/srv/mibori/Projects/wine/dlls/msi/action.c:1053] in msi (0x0033fb68) 17 0x7ee16dc3 ITERATE_Actions+0x141(row=0x1668a8, param=0x33fc1c) [/srv/mibori/Projects/wine/dlls/msi/action.c:861] in msi (0x0033fbc8) 18 0x7ee5d50a MSI_IterateRecords+0x98(view=0x68a440, count=(nil), func=0x7ee16c82, param=0x33fc1c) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033fbf8) 19 0x7ee171ec ACTION_ProcessUISequence+0xb4(package=0x15abf8) [/srv/mibori/Projects/wine/dlls/msi/action.c:991] in msi (0x0033fc38) 20 0x7ee16916 MSI_InstallPackage+0x23e(package=0x15abf8, szPackagePath=0x12d306, szCommandLine=0x12d4d8) [/srv/mibori/Projects/wine/dlls/msi/action.c:747] in msi (0x0033fc78) 21 0x7ee54ece MsiInstallProductW+0xb7(szPackagePath=0x12d306, szCommandLine=0x12d4d8) [/srv/mibori/Projects/wine/dlls/msi/msi.c:241] in msi (0x0033fcb8) 22 0x7eecf03d WinMain+0x167b(hInstance=0x7eec0000, hPrevInstance=(nil), lpCmdLine="/I "C:\temp\FR90PE\ABBYY FineReader 9.0 Professional Edition.msi" TRANSFORMS="C:\temp\FR90PE\1049.mst" /Liwrmo!vepacu "C:\windows\temp\ABBYY FineReader 9.0 Professional Edition.log"", nCmdShow=1) [/srv/mibori/Projects/wine/programs/msiexec/msiexec.c:935] in msiexec (0x0033fe38) 23 0x7eecf912 main+0x10a() [/srv/mibori/Projects/wine/dlls/winecrt0/exe_main.c:48] in msiexec (0x0033feb8) 24 0x7eecf7ee __wine_spec_exe_entry+0x6e(peb=0x7ffdf000) [/srv/mibori/Projects/wine/dlls/winecrt0/exe_entry.c:36] in msiexec (0x0033fef8) 25 0x7b88068d start_process+0xe4(arg=(nil)) [/srv/mibori/Projects/wine/dlls/kernel32/process.c:912] in kernel32 (0x0033ffe8) 26 0xb7e57cc7 wine_switch_to_stack+0x17() in libwine.so.1 (0x00000000) после этого вызова вызывается исключение в потоке, который запускается в самом начале установки. Исключение это вызывается искусственно следующим кодом: status = I_RpcGetBuffer(stubmsg->RpcMsg); if (status != RPC_S_OK) RpcRaiseException(status); // и выпадаем в бэктрейс исследования в глубину приводят к тому, что ошибочный status возвращается потому, что в структуре RpcBinding поле BOOL server; ложно. Кто и почему ее ставит в ложное состояние (или не инициализирует), пока найти не удаётся. > ошибочный status возвращается потому, что в
> структуре RpcBinding поле BOOL server; ложно.
оказалось, что это не совсем правильно.
Код формирующий неверный status оказался в rpc_transport.c в функции rpcrt4_conn_open_pipe(char *pname, BOOL wait) где pname = \\.\pipe\lrpc\ABBYY FineReader Professional 9.0 Licensing Service , wait = TRUE
if (!wait || !WaitNamedPipeA(pname, NMPWAIT_WAIT_FOREVER)) {
err = GetLastError();
WARN("connection failed, error=%x\n", err);
return RPC_S_SERVER_UNAVAILABLE;
}
ложным оказывается WaitNamedPipeA, по той причине, что именованный канал \\.\pipe\lrpc\ABBYY FineReader Professional 9.0 Licensing Service не создан.
RPC_S_SERVER_UNAVAILABLE соответствует значению status, из-за которого вызывается RpcRaiseException
Перед использованием WaitNamedPipeA, именованный канал должен быть создан через CreateNamedPipe, но этого вызова с именно таким именем вообще не происходит.
Где он должен происходить пока не понятно.
Логично было предположить, что он происходит в msi-потоке (поэтому исследую функции из бэктрейса msi-потока, приведеенного в предыдущем комментарии). Но другие (системные, не относящиеся к FineRider) именованные каналы (на которых rpcrt4_conn_open_pipe отрабатывается правильно), создаются не на стороне msi
> Код формирующий неверный status оказался в
> rpc_transport.c в функции rpcrt4_conn_open_pipe(char *pname, BOOL wait)
> где pname = \\.\pipe\lrpc\ABBYY FineReader Professional 9.0 Licensing
> Service , wait = TRUE
Бэктрейс rpc-потока этой точки
=>1 0x7b845320 RaiseException+0x84(code=1722, flags=0, nbargs=0, args=(nil)) [/srv/mibori/Projects/wine/dlls/kernel32/except.c:84] in kernel32 (0x7df83b94)
2 0x7e9113c5 RpcRaiseException+0x35(exception=1722) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpcrt4_main.c:184] in rpcrt4 (0x7df83bc4)
3 0x7e90d0ab rpcrt4_conn_open_pipe+0xca(Connection=0x695408, pname="\\.\pipe\lrpc\ABBYY FineReader Professional 9.0 Licensing Service", wait=1) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_transport.c:186] in rpcrt4 (0x7df83c34)
4 0x7e90d44f rpcrt4_ncalrpc_open+0x94(Connection=0x695408) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_transport.c:259] in rpcrt4 (0x7df83c64)
5 0x7e91084b RPCRT4_OpenClientConnection+0xa6(Connection=0x695408) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_transport.c:1492] in rpcrt4 (0x7df83c94)
6 0x7e8fd333 RpcAssoc_GetClientConnection+0xe2(assoc=0x72a4f0, InterfaceId=0x1015086c, TransferSyntax=0x10150880, AuthInfo=(nil), QOS=(nil), Connection=0x7df83d88) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_assoc.c:402] in rpcrt4 (0x7df83ce4)
7 0x7e8fec91 RPCRT4_OpenBinding+0xb2(Binding=0x124ec8, Connection=0x7df83d88, TransferSyntax=0x10150880, InterfaceId=0x1015086c) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_binding.c:282] in rpcrt4 (0x7df83d34)
8 0x7e908495 I_RpcNegotiateTransferSyntax+0x20a(pMsg=0x7df843ec) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_message.c:1035] in rpcrt4 (0x7df83d94)
9 0x7e908680 I_RpcGetBuffer+0x1a2(pMsg=0x7df843ec) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpc_message.c:1097] in rpcrt4 (0x7df83de4)
10 0x7e8de2e1 NdrGetBuffer+0x92(stubmsg=0x7df84260, buflen=176, handle=0x124ec8) [/srv/mibori/Projects/wine/dlls/rpcrt4/ndr_clientserver.c:171] in rpcrt4 (0x7df83e24)
11 0x7e8f9fbf NdrClientCall2+0x972(pStubDesc=0x10150bc8, pFormat="") [/srv/mibori/Projects/wine/dlls/rpcrt4/ndr_stubless.c:770] in rpcrt4 (0x7df844e4)
12 0x100fefd4 in msi3e73.tmp (+0xfefd4) (0x00c56794)
13 0x006c006c (0x00650063)
14 0x59005900 (0x42004200)
15 0x00000000 (0x00000000)
падение с бэктрейсом через RpcRaiseException там работает не всегда.
падение там через запись по нулевому указателю там не работает, но дает интересный результат с точки зрения msi-потока:
mib ret I_RpcGetBuffer(33f620) -> 0
-- тут падение
err:ntdll:RtlpWaitForCriticalSection section 0x110698 "?" wait timed out in thread 001b, blocked by 0020, retrying (60 sec)
err:ntdll:RtlpWaitForCriticalSection section 0x110698 "?" wait timed out in thread 001b, blocked by 0020, retrying (60 sec)
err:msi:ITERATE_StartService Failed to open service L"ABBYY.Licensing.FineReader.Professional.9.0"
mib call I_RpcGetBuffer(33f640)
mib call I_RpcNegotiateTransferSyntax(33f640)
mib call RPCRT4_OpenBinding(...)
mib call RpcAssoc_GetClientConnection(...)
mib ret RPCRT4_OpenBinding(...) -> 0
mib ret I_RpcNegotiateTransferSyntax(33f640) -> 0 (ending)
mib I_RpcGetBuffer: !bind->server true
mib ret I_RpcGetBuffer(33f640) -> 0
err:ntdll:RtlpWaitForCriticalSection section 0x110698 "?" wait timed out in thread 001b, blocked by 0020, retrying (60 sec)
несмотря на незакрытую критическую секцию, после падения msi-потоке пытается запустится ITERATE_StartService. Можно, как вариант, упасть в этом вызове.
> несмотря на незакрытую критическую секцию,
> после падения msi-потоке пытается
> запустится ITERATE_StartService. Можно, как вариант,
> упасть в этом вызове.
падение msi-потока в ITERATE_StartService при падении rpc-потока при присваивании по нулевому указтелю
=>1 0x7ee20872 ITERATE_StartService+0x45(rec=0x73f328, param=0x1411e0) [/srv/mibori/Projects/wine/dlls/msi/action.c:4725] in msi (0x0033f7e8)
2 0x7ee5d4a6 MSI_IterateRecords+0x98(view=0x831ce0, count=(nil), func=0x7ee2082d, param=0x1411e0) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033f818)
3 0x7ee20b6c ACTION_StartServices+0x67(package=0x1411e0) [/srv/mibori/Projects/wine/dlls/msi/action.c:4787] in msi (0x0033f848)
4 0x7ee24bae ACTION_HandleStandardAction+0x161(package=0x1411e0, action=0x17a538, rc=0x33f8c0, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:6458] in msi (0x0033f888)
5 0x7ee172ee ACTION_PerformAction+0x91(package=0x1411e0, action=0x17a538, script=0, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:1032] in msi (0x0033f8c8)
6 0x7ee18e37 execute_script+0x17a(package=0x1411e0, script=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:1671] in msi (0x0033f928)
7 0x7ee1f6da ACTION_InstallExecute+0x19(package=0x1411e0) [/srv/mibori/Projects/wine/dlls/msi/action.c:4214] in msi (0x0033f938)
8 0x7ee1f929 ACTION_InstallFinalize+0x3a(package=0x1411e0) [/srv/mibori/Projects/wine/dlls/msi/action.c:4295] in msi (0x0033f968)
9 0x7ee24bae ACTION_HandleStandardAction+0x161(package=0x1411e0, action=0x17cc50, rc=0x33f9e0, force=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:6458] in msi (0x0033f9a8)
10 0x7ee172ee ACTION_PerformAction+0x91(package=0x1411e0, action=0x17cc50, script=4294967295, force=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:1032] in msi (0x0033f9e8)
11 0x7ee16dec ITERATE_Actions+0x16a(row=0x698078, param=0x33fa9c) [/srv/mibori/Projects/wine/dlls/msi/action.c:863] in msi (0x0033fa48)
12 0x7ee5d4a6 MSI_IterateRecords+0x98(view=0x14fe08, count=(nil), func=0x7ee16c82, param=0x33fa9c) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033fa78)
13 0x7ee1711b ACTION_ProcessExecSequence+0x18c(package=0x1411e0, UIran=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:961] in msi (0x0033fac8)
14 0x7ee1fe89 ACTION_ExecuteAction+0x2e(package=0x1411e0) [/srv/mibori/Projects/wine/dlls/msi/action.c:4471] in msi (0x0033fae8)
15 0x7ee24bae ACTION_HandleStandardAction+0x161(package=0x1411e0, action=0x148440, rc=0x33fb60, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:6458] in msi (0x0033fb28)
16 0x7ee17428 ACTION_PerformUIAction+0x99(package=0x1411e0, action=0x148440, script=4294967295) [/srv/mibori/Projects/wine/dlls/msi/action.c:1053] in msi (0x0033fb68)
17 0x7ee16dc3 ITERATE_Actions+0x141(row=0x14ce90, param=0x33fc1c) [/srv/mibori/Projects/wine/dlls/msi/action.c:861] in msi (0x0033fbc8)
18 0x7ee5d4a6 MSI_IterateRecords+0x98(view=0x68a440, count=(nil), func=0x7ee16c82, param=0x33fc1c) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033fbf8)
19 0x7ee171ec ACTION_ProcessUISequence+0xb4(package=0x1411e0) [/srv/mibori/Projects/wine/dlls/msi/action.c:991] in msi (0x0033fc38)
20 0x7ee16916 MSI_InstallPackage+0x23e(package=0x1411e0, szPackagePath=0x126d86, szCommandLine=0x12a500) [/srv/mibori/Projects/wine/dlls/msi/action.c:747] in msi (0x0033fc78)
21 0x7ee54e6a MsiInstallProductW+0xb7(szPackagePath=0x126d86, szCommandLine=0x12a500) [/srv/mibori/Projects/wine/dlls/msi/msi.c:241] in msi (0x0033fcb8)
22 0x7eecf03d WinMain+0x167b(hInstance=0x7eec0000, hPrevInstance=(nil), lpCmdLine="/I "C:\temp\FR90PE\ABBYY FineReader 9.0 Professional Edition.msi" TRANSFORMS="C:\temp\FR90PE\1049.mst" /Liwrmo!vepacu "C:\windows\temp\ABBYY FineReader 9.0 Professional Edition.log"", nCmdShow=1) [/srv/mibori/Projects/wine/programs/msiexec/msiexec.c:935] in msiexec (0x0033fe38)
23 0x7eecf912 main+0x10a() [/srv/mibori/Projects/wine/dlls/winecrt0/exe_main.c:48] in msiexec (0x0033feb8)
24 0x7eecf7ee __wine_spec_exe_entry+0x6e(peb=0x7ffdf000) [/srv/mibori/Projects/wine/dlls/winecrt0/exe_entry.c:36] in msiexec (0x0033fef8)
25 0x7b88068d start_process+0xe4(arg=(nil)) [/srv/mibori/Projects/wine/dlls/kernel32/process.c:912] in kernel32 (0x0033ffe8)
26 0xb7e76cc7 wine_switch_to_stack+0x17() in libwine.so.1 (0x00000000)
Это уже совершенно другое действие (вероятно идущее после установки сервиса)
раскопки msi-потока привели к однозначной причине того, почему не создается именованный канал, последующее обращение к которому приводит к исключению. В функции ITERATE_InstallService имеется попытка создать сервис через CreateServiceW. CreateServiceW возвращает нуль вместо хэндла сервиса. В ней вызов svcctl_CreateServiceW падает, но закрыт try ... except и таким образом, в msi потоке ничего об ошибке не видно. Стоит только убрать try ... except мы получаем следующий бэктрейс, где видна связь msi и rpc: =>1 0x7b845320 RaiseException+0x84(code=1783, flags=0, nbargs=0, args=(nil)) [/srv/mibori/Projects/wine/dlls/kernel32/except.c:84] in kernel32 (0x0033f3f8) 2 0x7e92547d RpcRaiseException+0x35(exception=1783) [/srv/mibori/Projects/wine/dlls/rpcrt4/rpcrt4_main.c:184] in rpcrt4 (0x0033f428) 3 0x7e8f88c2 safe_buffer_increment+0x55(pStubMsg=0x33f550, size=4) [/srv/mibori/Projects/wine/dlls/rpcrt4/ndr_marshall.c:659] in rpcrt4 (0x0033f438) 4 0x7e8f8990 NdrPointerUnmarshall+0xb8(pStubMsg=0x33f550, ppMemory=0x33f694, pFormat="\, fMustAlloc=0) [/srv/mibori/Projects/wine/dlls/rpcrt4/ndr_marshall.c:1506] in rpcrt4 (0x0033f478) 5 0x7ec686cc svcctl_CreateServiceW+0x75b(hSCManager=0x73b348, lpServiceName=0x73b5d0, lpDisplayName=0x73b630, dwDesiredAccess=268435456, dwServiceType=16, dwStartType=2, dwErrorControl=0, lpBinaryPathName=0x1913b0, lpLoadOrderGroup=(nil), lpdwTagId=(nil), lpDependencies=0x0, dwDependenciesSize=0, lpServiceStartName=(nil), lpPassword=0x0, dwPasswordSize=0, phService=0x73b384) [/srv/mibori/Projects/wine/dlls/advapi32/svcctl_c.c:1259] in advapi32 (0x0033f668) 6 0x7ec626a8 CreateServiceW+0x28a(hSCManager=0x73b298, lpServiceName=0x73b5d0, lpDisplayName=0x73b630, dwDesiredAccess=268435456, dwServiceType=16, dwStartType=2, dwErrorControl=0, lpBinaryPathName=0x1913b0, lpLoadOrderGroup=(nil), lpdwTagId=(nil), lpDependencies=(nil), lpServiceStartName=(nil), lpPassword=(nil)) [/srv/mibori/Projects/wine/dlls/advapi32/service.c:1184] in advapi32 (0x0033f6f8) 7 0x7ee205da ITERATE_InstallService+0x3df(rec=0x73b060, param=0x15ac08) [/srv/mibori/Projects/wine/dlls/msi/action.c:4633] in msi (0x0033f7e8) 8 0x7ee5d48a MSI_IterateRecords+0x98(view=0x737770, count=(nil), func=0x7ee201fb, param=0x15ac08) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033f818) 9 0x7ee20704 ACTION_InstallServices+0x67(package=0x15ac08) [/srv/mibori/Projects/wine/dlls/msi/action.c:4662] in msi (0x0033f848) 10 0x7ee24b90 ACTION_HandleStandardAction+0x161(package=0x15ac08, action=0x196db0, rc=0x33f8c0, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:6451] in msi (0x0033f888) 11 0x7ee172ee ACTION_PerformAction+0x91(package=0x15ac08, action=0x196db0, script=0, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:1032] in msi (0x0033f8c8) 12 0x7ee18e37 execute_script+0x17a(package=0x15ac08, script=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:1671] in msi (0x0033f928) 13 0x7ee1f6da ACTION_InstallExecute+0x19(package=0x15ac08) [/srv/mibori/Projects/wine/dlls/msi/action.c:4214] in msi (0x0033f938) 14 0x7ee1f929 ACTION_InstallFinalize+0x3a(package=0x15ac08) [/srv/mibori/Projects/wine/dlls/msi/action.c:4295] in msi (0x0033f968) 15 0x7ee24b90 ACTION_HandleStandardAction+0x161(package=0x15ac08, action=0x194f08, rc=0x33f9e0, force=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:6451] in msi (0x0033f9a8) 16 0x7ee172ee ACTION_PerformAction+0x91(package=0x15ac08, action=0x194f08, script=4294967295, force=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:1032] in msi (0x0033f9e8) 17 0x7ee16dec ITERATE_Actions+0x16a(row=0x681540, param=0x33fa9c) [/srv/mibori/Projects/wine/dlls/msi/action.c:863] in msi (0x0033fa48) 18 0x7ee5d48a MSI_IterateRecords+0x98(view=0x177558, count=(nil), func=0x7ee16c82, param=0x33fa9c) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033fa78) 19 0x7ee1711b ACTION_ProcessExecSequence+0x18c(package=0x15ac08, UIran=0) [/srv/mibori/Projects/wine/dlls/msi/action.c:961] in msi (0x0033fac8) 20 0x7ee1fe89 ACTION_ExecuteAction+0x2e(package=0x15ac08) [/srv/mibori/Projects/wine/dlls/msi/action.c:4471] in msi (0x0033fae8) 21 0x7ee24b90 ACTION_HandleStandardAction+0x161(package=0x15ac08, action=0x161e68, rc=0x33fb60, force=1) [/srv/mibori/Projects/wine/dlls/msi/action.c:6451] in msi (0x0033fb28) 22 0x7ee17428 ACTION_PerformUIAction+0x99(package=0x15ac08, action=0x161e68, script=4294967295) [/srv/mibori/Projects/wine/dlls/msi/action.c:1053] in msi (0x0033fb68) 23 0x7ee16dc3 ITERATE_Actions+0x141(row=0x1668b8, param=0x33fc1c) [/srv/mibori/Projects/wine/dlls/msi/action.c:861] in msi (0x0033fbc8) 24 0x7ee5d48a MSI_IterateRecords+0x98(view=0x68a440, count=(nil), func=0x7ee16c82, param=0x33fc1c) [/srv/mibori/Projects/wine/dlls/msi/msiquery.c:190] in msi (0x0033fbf8) 25 0x7ee171ec ACTION_ProcessUISequence+0xb4(package=0x15ac08) [/srv/mibori/Projects/wine/dlls/msi/action.c:991] in msi (0x0033fc38) 26 0x7ee16916 MSI_InstallPackage+0x23e(package=0x15ac08, szPackagePath=0x12d316, szCommandLine=0x12d4e8) [/srv/mibori/Projects/wine/dlls/msi/action.c:747] in msi (0x0033fc78) 27 0x7ee54e4e MsiInstallProductW+0xb7(szPackagePath=0x12d316, szCommandLine=0x12d4e8) [/srv/mibori/Projects/wine/dlls/msi/msi.c:241] in msi (0x0033fcb8) 28 0x7eecf03d WinMain+0x167b(hInstance=0x7eec0000, hPrevInstance=(nil), lpCmdLine="/I "C:\temp\FR90PE\ABBYY FineReader 9.0 Professional Edition.msi" TRANSFORMS="C:\temp\FR90PE\1049.mst" /Liwrmo!vepacu "C:\windows\temp\ABBYY FineReader 9.0 Professional Edition.log"", nCmdShow=1) [/srv/mibori/Projects/wine/programs/msiexec/msiexec.c:935] in msiexec (0x0033fe38) 29 0x7eecf912 main+0x10a() [/srv/mibori/Projects/wine/dlls/winecrt0/exe_main.c:48] in msiexec (0x0033feb8) 30 0x7eecf7ee __wine_spec_exe_entry+0x6e(peb=0x7ffdf000) [/srv/mibori/Projects/wine/dlls/winecrt0/exe_entry.c:36] in msiexec (0x0033fef8) 31 0x7b88068d start_process+0xe4(arg=(nil)) [/srv/mibori/Projects/wine/dlls/kernel32/process.c:912] in kernel32 (0x0033ffe8) 32 0xb7e51cc7 wine_switch_to_stack+0x17() in libwine.so.1 (0x00000000) раскопки в глубину обнаруживают в функции scmdatabase_find_service_by_displayname исключение в момент выполнения strcmpiW при обходе списка сервисов db->services на втором элементе списка. Кажется этот список неправильно заполняется из таблиц msi несколькими уровнями выше (ниже по бэктрейсу). Это, вероятно, и есть истинная причина ошибки. (In reply to comment #15) > раскопки msi-потока привели к однозначной > причине того, почему не создается > именованный канал, последующее обращение к > которому приводит к исключению. > > В функции ITERATE_InstallService имеется попытка > создать сервис через CreateServiceW. CreateServiceW > возвращает нуль вместо хэндла сервиса. В > ней вызов svcctl_CreateServiceW падает, но закрыт try ... > except и таким образом, в msi потоке ничего об > ошибке не видно. Стоит только убрать try ... > except мы получаем следующий бэктрейс, где > видна связь msi и rpc: > раскопки в глубину обнаруживают в функции > scmdatabase_find_service_by_displayname исключение в момент > выполнения strcmpiW при обходе списка сервисов > db->services на втором элементе списка. Кажется > этот список неправильно заполняется из > таблиц msi несколькими уровнями выше (ниже > по бэктрейсу). Это, вероятно, и есть > истинная причина ошибки. > оказывается, что этот список не из msi базы также сервис не должен там находится на момент возникновения исключения (он позже туда добавляется). И если решить проблему исключения, то успещно. Проблема выпадения strcmpiW решил. Добавив проверку на нуль. Сервисы имеющие нуль в DisplayName это SNTNLUSB и eusk3usb (т. е. сваливалось на них). Решение пока не удается протестировать т. к. CreateServiceW выдает каждый разный результат. Также после решения отказываются работать дебагмессаджи из wine/programs/services/services.c Пока не разобрался почему. Есть подозрение, что во всем виноват запуск сервиса, который происходит после его добавления. (In reply to comment #16) > Проблема выпадения strcmpiW решил. Добавив > проверку на нуль. > Сервисы имеющие нуль в DisplayName это SNTNLUSB и > eusk3usb (т. е. сваливалось на них). С Сашей посоветовался о причинах и полном устранении проблемы? (In reply to comment #17) > (In reply to comment #16) > > Проблема выпадения strcmpiW решил. Добавив > > проверку на нуль. > > Сервисы имеющие нуль в DisplayName это SNTNLUSB и > > eusk3usb (т. е. сваливалось на них). > С Сашей посоветовался о причинах и полном > устранении проблемы? да. Он говорит, что нуль там в пределах нормы. делаю у себя локально. результат такой же неоднозначный. из того что выяснено: 0. запускаем установку, проходит копирование, начинается установка сервисов 1. сервис ABBYY.Licensing.FineReader.Professional.9.0 устанавливается успешно, о чем свидетельствует строчка mib ret CreateServiceW(A) -> 83cae8 (normal) 2. далее процесс установки падает с тем же бэктрейсом, возникает при отсутствии именованного канала. Значит установленный сервис не запускается 3. смотрю в реестр, вижу [System\\CurrentControlSet\\Services\\ABBYY.Licensing.FineReader.Professional.9.0] 1228741502 "DisplayName"="ABBYY FineReader 9.0 Licensing Service" "ErrorControl"=dword:00000000 "ImagePath"="C:\\Program Files\\ABBYY FineReader 9.0\\NetworkLicenseServer.exe" "ObjectName"="LocalSystem" "Start"=dword:00000002 "Type"=dword:00000010 файл NetworkLicenseServer.exe где нужно. 4. Запускаю setup.exe снова. Сразу вижу лог [mibori@builder FR90PE]$ wwxp setup.exe mibori call service_create(L"ABBYY.Licensing.FineReader.Professional.9.0", ...) mibori ret service_create(L"ABBYY.Licensing.FineReader.Professional.9.0", ...) -> ERROR_SUCCESS mibori call service_create(L"BITS", ...) mibori ret service_create(L"BITS", ...) -> ERROR_SUCCESS mibori call service_create(L"eusk3usb", ...) mibori ret service_create(L"eusk3usb", ...) -> ERROR_SUCCESS ... mib CreateNamedPipeW(L"\\\\.\\pipe\\svcctl", 0x000003, 0x000006, 255, 5840, 5840, 5000, (nil)) mibori thread d -> Create Thread 44 #0 mib CreateNamedPipeW(L"\\\\.\\pipe\\net\\NtControlPipe0", 0x000003, 00000000, 1, 256, 256, 10000, (nil)) на этом всё заканчивается при этом возникает MessageBox-сообщение о неправильности командной строки. Т. е. и в первом и во втором случае он пытается запустить сервис, но не может. 5. в третий раз запускаем установку. Установка завершается опять же падением сервиса. Но на этот раз создание сервиса завершается неудачей mib ret CreateServiceW(A) -> NULL (err != ERROR_SUCCESS) т. к. он уже создан 6. понятно, что проблема в запуске сервиса. попробую отследить с какими параметрами запускается NetworkLicenseServer.exe в винде дебаглог третьего запуска от второго отличаются тем, что в нем нет трейс-строк из wine/programs/services/services.c это очень мешает. пока не знаю как побороть можно оценить объем трудозатрат, который еще необходим? (In reply to comment #20) > можно оценить объем трудозатрат, который > еще необходим? > максимум два дня. после чего думаю, стоит отложить багу и заняться более приоритетным. сделал так, чтобы сервис запускался. именованный канал по прежнему не создается. завтра опишу, что сделал подробнее. Created attachment 963 [details]
Зарегестированный сервис на винде
Что получается после CreateServiceW на винде.
Юникодное ImagePath это
"C:\Program Files\ABBYY FineReader 9.0\NetworkLicenseServer.exe" -service
приложение просматривается в браузере с кодировкой UTF-16 LE См. wine-овский ветку реестра в комментарии http://bugs.etersoft.ru/show_bug.cgi?id=807#c19 Запуск процесса сервиса у нас происходит без параметра -service Из-за того, что MSI не правильно регистрирует его в системе. А как следует -- неправильное значение ImagePath патч сейчас будет. http://lists.etersoft.ru/pipermail/wine-patches/2008-December/000138.html описание этого аргумента и то, что он должен содержать аргумент, по ссылке http://msdn.microsoft.com/en-us/library/ms682450(VS.85).aspx Функция CreateServiceW закрывает вызов svcctl_CreateServiceW через try...except когда svcctl_CreateServiceW падает с сегфолтом, никак это заметить невозможно. в результате сервис молча не создается. try...except оставляем, а сообщение о падении добавляем. патч: http://lists.etersoft.ru/pipermail/wine-patches/2008-December/000139.html и, наконец, падение svcctl_CreateServiceW связяно с тем, что в функции scmdatabase_find_service_by_displayname нет проверки свойства DisplayName сервиса на нуль перед сравнением. патч: http://lists.etersoft.ru/pipermail/wine-patches/2008-December/000140.html в виндовском реестре и правда есть зарегистрированные сервисы с не указанным DisplayName однако, несмотря на то, что сервис запускается, именованный канал не создается разбираюсь почему. вся последовательность вызовов, приводящая к созданию канала, начиная от msi, кончая, собственно созданием выглядит так (стрелочка -- вложенный вызов) ITERATE_StartService -> StartServiceW -> TRY { svcctl_StartServiceW -> service_start -> CreateNamedPipeW } то же самое должно происходить и в случае запуска сервиса не из msi ищу на чем затыкается... Итак, падение проявляется между standart-действиями InstallServices и StartServices из-за того, что именованный канал не создается. Между этими действиями появляется custom-действие со странным именем [LICENSES=C:\\windows\\profiles\\All Users\\Application Data\\ABBYY\\FineReader\\9.00\\Licenses\\;SOURCEDIR=C:\... (не полное название), которое вызывает функцию InstallOnMachineAndRegistration в InstallTools.dll. которая, вызываясь, вызывает внутри NdrClientCall2 (и то, что мы видем в изначальном бэктрейсе), и искусственно падает из-за отсутствия открытого канала \\.\pipe\lrpc\ABBYY FineReader Professional 9.0 Licensing Service. В чем собственно и бага. название сервиса, очевидно представляет из себя набор переменных окружения. Однако при установки на винде, запущенный процесс сервиса NetworkLicenseServer.exe не имеет с этим окружением ничего общего. Также, без процесса установки этот сервис запустить не удается. Запуск действия InstallServices сопровождается успешным созданием канала \\\\.\\pipe\\svcctl . Пока я не знаю, для чего он создается. Но возможно он создается по ошибке, и вместо него должен создаваться \\.\pipe\lrpc\ABBYY FineReader Professional 9.0 Licensing Servicе. Канал \\\\.\\pipe\\svcctl создается несколько по другой схеме, чем при выполнении StartServiceW. Запуск сервиса в действии InstallServices пока не удается -- сервис падает. В сервисе InstallServices удалось, кроме того, что создавать сервис, еще его корректно запускать (при этом канал создается). После успешного исполнения действия InstallServices, действие [LICENSES=C:\\windows\\profiles\\All Users\\Application Data\\ABBYY\\FineReader\\9.00\\Licenses\\;SOURCEDIR=C:\... еще раз отдельно создает канал (что странно), за тем падает. Причина падения пока не ясна и отличается от причины падения возникающей при отсутствии канала. Пока я это падение не буду рассматривать. Есть два решения на чуть более высоком уровне, которые, возможно, могут помочь: 1) исключить действие [LICENSES=C:\\windows\\profiles\\All Users\\Application Data\\ABBYY\\FineReader\\9.00\\Licenses\\;SOURCEDIR=C:\... из процесса установки полностью 2) поменять последовательность действий местами: сейчас: -> InstallServices -> [LICENSES... -> StartServices -> поменять на: -> InstallServices -> StartServices -> [LICENSES... -> так, чтобы действие [LICENSES... стартовало, когда StartServices отработало > 1) исключить действие [LICENSES=C:\\windows\\profiles\\All
> Users\\Application
> Data\\ABBYY\\FineReader\\9.00\\Licenses\\;SOURCEDIR=C:\... из
> процесса установки полностью
если это сделать, то установка проходит успешно.
далее FineReader.exe не запускается
вылетая с тем же бэктрейсом, что и когда я делал запуск сервиса в действии его установки (см. предыдущий комментарий).
теперь попробую поменять местами действия...
> 2) поменять последовательность действий > местами: > сейчас: > -> InstallServices -> [LICENSES... -> StartServices -> > поменять на: > -> InstallServices -> StartServices -> [LICENSES... -> > > так, чтобы действие [LICENSES... стартовало, > когда StartServices отработало это сделать не получается. во-первых потому, что действия [LICENSES... нет существует во-вторых каждое действие, которое выполняется последовательно в цикле, имеет численное значение, которое указывает что за чем будет выполнятся (запрос идет с ORDER BY ...) в третьих эти два действия выполняются на разных уровнях вложенности (не водном цикле). Обнаружил, что [LICENSES... -- это поддействие действия IT_InstallOnMachine, в котором выполняется скрипт, а строка "[LICENSES..." интерпретируется как имя действия, возможно, неправильно. На это указывает 12-ая строчка бэктрейса в комментарии http://bugs.etersoft.ru/show_bug.cgi?id=807#c15 и непосредственное падение в действии "[LICENSES". Нужно посмотреть, что на самом деле должна выполнять функция execute_script, вместо того, чтобы вызывать действие с именем элемента из скрипта. для связи с 3098, как сейчас воспроизводится бага: <wine@cellar bottle fr/eterbug-807>$ wwxp setup.exe fixme:msi:msi_unimplemented_action_stub MigrateFeatureStates -> 1 ignored L"Upgrade" table values err:msi:msi_dialog_create_controls no handler for element type L"Billboard" fixme:msi:ACTION_HandleStandardAction unhandled standard action L"SetODBCFolders" fixme:msi:msi_unimplemented_action_stub MigrateFeatureStates -> 1 ignored L"Upgrade" table values fixme:msi:msi_unimplemented_action_stub RemoveExistingProducts -> 1 ignored L"Upgrade" table values fixme:ntdll:NtLockFile I/O completion on lock not implemented yet fixme:msi:ACTION_CustomAction Rollback only action... rollbacks not supported yet fixme:msi:ACTION_CustomAction Rollback only action... rollbacks not supported yet fixme:msi:ACTION_CustomAction Rollback only action... rollbacks not supported yet fixme:msi:ACTION_CustomAction Rollback only action... rollbacks not supported yet fixme:msi:ACTION_CustomAction Rollback only action... rollbacks not supported yet fixme:msi:ACTION_CustomAction Rollback only action... rollbacks not supported yet fixme:msi:ACTION_CustomAction Rollback only action... rollbacks not supported yet fixme:msi:msi_unimplemented_action_stub DeleteServices -> 1 ignored L"ServiceControl" table values fixme:msi:msi_unimplemented_action_stub RemoveShortcuts -> 16 ignored L"Shortcut" table values fixme:msi:msi_unimplemented_action_stub RemoveFolders -> 8 ignored L"CreateFolder" table values fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut fixme:msi:ITERATE_CreateShortcuts poorly handled shortcut format, advertised shortcut fixme:msi:ITERATE_InstallService Dependency list unhandled! wine: Unhandled exception 0x000006ba at address 0x7b84545c (thread 0045), starting debugger... err:rpc:RpcRaiseException handler continued execution <wine@cellar bottle fr/eterbug-807>$ err:menubuilder:InvokeShellLinker failed to build the menu err:menubuilder:InvokeShellLinker failed to build the menu err:menubuilder:InvokeShellLinker failed to build the menu err:menubuilder:InvokeShellLinker failed to build the menu err:menubuilder:InvokeShellLinker failed to build the menu err:menubuilder:InvokeShellLinker failed to build the menu err:menubuilder:InvokeShellLinker failed to build the menu err:menubuilder:InvokeShellLinker failed to build the menu err:menubuilder:InvokeShellLinker failed to build the menu Created attachment 971 [details] Дерево действий установки (для сравнения с деревом http://bugs.etersoft.ru/show_bug.cgi?id=3098#c3) с решением для 3098 установка при "установки служб" всё равно падает с ошибкой: ... fixme:msi:ITERATE_InstallService Dependency list unhandled! call CreateServiceW(...) ret CreateServiceW(...) -> 713370 wine: Unhandled exception 0x000006ba at address 0x7b8454a4 (thread 0044), starting debugger... err:rpc:RpcRaiseException handler continued execution P.S.: если установка зависает на начальном этапе, не отрисовываясь, нужно приложиь патч из 2234. ничего конкретного пока сказать не могу -- пока в процессе анализа. оказалось, что проблема с действием [a=b;c=d;...] существует, как в этой баге так и в 3098. Просто в 3098 это не так важно (и не приводит на данный момент к падению). если внимательно присмотреться к содержимому msi-таблиц, то формы [a=b;c=d;...] не существует вместо нее есть a=[b];c=[d];... в конкретном случае из LICENSES=[LICENSES];SOURCEDIR=[SOURCEDIR]... в таблице CustomAction получается такая фигня: L"[LICENSES=C:\\windows\\profiles\\All Users\\Application Data\\ABBYY\\FineReader\\9.00\\Licenses\\;SOURCEDIR=C:\\FR90PE\\;MAIN_SUBFOLDER=ABBYY FineReader 9.0;LIC_SERVER_NAME=;INSTALLDIR=C:\\Program Files\\ABBYY FineReader 9.0\\;ProductLanguage=1033;LIC_CONFIGXML=<Rollback file=\"C:\\windows\\temp\\ABB"... которая в конечном итоге передается в ACTION_CustomAction, где и обрабатывается не правильно. Пока не понятно, либо это действие передается в ACTION_CustomAction по ошибке на более высоком уровне, либо логика ACTION_CustomAction неправильно ее обрабатывает. Анализ кода ACTION_CustomAction, склоняет мысли к первому варианту... в процессе исследования: нужно распознать где строчка L"[LICENSES=C:\\windows\\profiles\\All Users\\Application Data\\ABBYY\\FineReader\\9.00\\Licenses\\;SOURCEDIR=C:\\FR90PE\\;MAIN_SUBFOLDER=ABBYY FineReader 9.0;LIC_SERVER_NAME=;INSTALLDIR=C:\\Program Files\\ABBYY FineReader 9.0\\;ProductLanguage=1033;LIC_CONFIGXML=<Rollback file=\"C:\\windows\\temp\\ABB"... засовывается в список в качестве действия. список этот хранится в package->script->Actions[0][i] где i = 0 .. package->script->ActionCount[0] От ACTION_PerformAction падением узнал бэктрейс функций, одна из которых это делает: 0 ACTION_PerformAction 1 execute_script 2 ACTION_InstallExecute 3 ACTION_InstallFinalize 4 ACTION_HandleStandardAction 5 ACTION_PerformAction 6 ITERATE_Actions 7 MSI_IterateRecords <------ 8 ACTION_ProcessExecSequence 9 ACTION_ExecuteAction 10 ACTION_HandleStandardAction 11 ACTION_PerformUIAction 12 ITERATE_Actions 13 MSI_IterateRecords 14 ACTION_ProcessUISequence 15 MSI_InstallPackage 16 MsiInstallProductW проанализировал код функций и протрейсил вплоть до 8-ого вызова, от точки падения. На данный момент думаю, что список меняется на седьмом вызове (вызове MSI_IterateRecords). Я пока не знаю как это происходит (из каких таблиц и каким способом). Сложность отладки заключается в косвенной рекурсии некоторых функций (ACTION_PerformAction, ACTION_HandleStandartAction, ITERATE_Actions, MSI_IterateRecords), т. к. при выводе дебаг-сообщений в консоль участвуют не только нижележащие вызовы (которые надо анализировать), но и вышележащие, что при выводе значений списков строк, сильно загромождает лог. ---------- 1 ------------ Итак с точки зрения MSI, в конце установки происходит стандартное действие InstallFinalize Смысл этого действия сводится к тому, чтобы выполнить некоторый список других действий, который назовём "скриптом" Список на момент выполнения InstallFinalize находится package->script->Actions[0][i], i = 0..package->script->ActionCount[0] package это текущий MSIPACKAGE Вот его содержимое (без двух зведочек впереди): ** L"AllocateRegistrySpace" ** L"ProcessComponents" ** L"UnpublishComponents" ** L"MsiUnpublishAssemblies" ** L"UnpublishFeatures" ** L"StopServices" ** L"DeleteServices" ** L"UnregisterComPlus" ** L"SelfUnregModules" ** L"UnregisterTypeLibraries" ** L"RemoveODBC" ** L"UnregisterFonts" ** L"RemoveRegistryValues" ** L"UnregisterClassInfo" ** L"UnregisterExtensionInfo" ** L"UnregisterProgIdInfo" ** L"UnregisterMIMEInfo" ** L"RemoveIniValues" ** L"RemoveShortcuts" ** L"RemoveEnvironmentStrings" ** L"RemoveDuplicateFiles" ** L"RemoveFiles" ** L"RemoveFolders" ** L"CreateFolders" ** L"MoveFiles" ** L"InstallFiles" ** L"PatchFiles" ** L"DuplicateFiles" ** L"BindImage" ** L"CreateShortcuts" ** L"RegisterClassInfo" ** L"RegisterExtensionInfo" ** L"RegisterProgIdInfo" ** L"RegisterMIMEInfo" ** L"WriteIniValues" ** L"WriteEnvironmentStrings" ** L"RegisterFonts" ** L"InstallODBC" ** L"RegisterTypeLibraries" ** L"RegisterComPlus" ** L"InstallServices" ** L"[LICENSES=C:\\windows\\profiles\\All Users\\Application Data\\ABBYY\\FineReader\\9.00\\Licenses\\;SOURCEDIR=C:\\FR90PE\\;MAIN_SUBFOLDER=ABBYY FineReader 9.0;LIC_SERVER_NAME=;INSTALLDIR=C:\\Program Files\\ABBYY FineReader 9.0\\;ProductLanguage=1033;LIC_CONFIGXML=<Rollback file=\"C:\\windows\\temp\\ABB"... ** L"StartServices" ** L"SelfRegModules" ** L"WriteRegistryValues" ** L"Launch_TrigrammsInstallerExe"L"[LICENSES=C:... ** L"Launch_Registrator_InstallFR" ** L"Launch_Registrator_Excel" ** L"Launch_Registrator_Explorer" ** L"Launch_Registrator_Outlook" ** L"Launch_Registrator_Word" ** L"RegisterUser" ** L"RegisterProduct" ** L"PublishComponents" ** L"MsiPublishAssemblies" ** L"PublishFeatures" ** L"PublishProduct" действия из списка выполняются последовательно, один за другим:L"[LICENSES=C:... после L"InstallServices", выполняется L"[LICENSES=C:..., которое и приводит к краху. смысл этого действия на самом деле заключается в том, чтобы занести значения некоторых свойств в MSI таблицу. Делается это в функции ACTION_CustomAction функцией set_deferred_action_props. Но в реальности ошибка в том, что после того как значения свойств проинициализированы, ошибочно выполняется некоторый вызов из dll, который по сути не должен происходить. Патч, который я делаю будет решать именно эту проблему. -------------- 2 ------------- Также существует другая мысль по поводу ошибки. Связана она с тем, почему среди действий с обычными именами, появляется действие с таким необычным именем. Так вот в процессе установки, прежде, чем будет выполнен прогон по этому списку с последовательным выполнением каждого из перечисленных действий, этот список должен быть сформирован. Формируется он не в одной функции, а последовательно: опять же чуть ранее InstallFinalize выполняется последовательность разных действий, и каждое из них добавляет в вышеупомянутый список новое имя действия (чтобы потом в InstallFinalize выполнить их все последовательно). Действие, которое запускается раньше InstallFinalize, и которое заносит в список действие L"[LICENSES... зовут IT_InstallOnMachine. Добавляет оно туда строчку L"[LICENSES... опять же в функции ACTION_CustomAction, через функцию schedule_action в участке кода: else { TRACE("Deferring Action!\n"); MESSAGE("\tTRACE Deferring Action!\n"); schedule_action(package, INSTALL_SCRIPT, deferred); } //в deferred как раз и формируется строчка L"[LICENSES=C:... мысль состоит в том, что это может быть неправильно. --------- debug --------------- если придется отлаживать и ту и другую ситуацию в будущем, то вот такие советы: Во-первых: ключевая функция у нас будет ACTION_CustomAction. Во-вторых: 1) там где список выполняется, действие будет action = L"[LICENSES... , чтобы обнаружить это действие первым символом должен включать action[0] == '[' 2) там где строчка L"[LICENSES... только заносится в список, нам нужно обнаруживать выполнение действия IT_InstallOnMachine соответсвенно делаем: static const WCHAR szIT_InstallOnMachine[] = {'I','T','_','I','n','s','t','a','l','l','O','n','M','a','c','h','i','n','e',0}; if(strcmpW(action, szIT_InstallOnMachine) == 0) MESSAGE("... так мы можем отследить действие по занесению нового действия В треьих: если бэктрейс не выводится, то просто нужно перезапустить инсталляцию, без восстановления бутылки. В четвёртых: вот что происходит, чтобы понимать общую картинку: ... {выполняются разные действия} {каждое из них кидает в список script имя отложенного действия} {среди них есть IT_InstallOnMachine, которое добавляет L"[LICENSES=C:... в список script} ... {начинает выполнятся действие InstallFinalize, она выполняет последовательно действия из списка script} {из списка выполняется L"AllocateRegistrySpace"} {из списка выполняется L"ProcessComponents"} ... и т. д. по сформированному ранее списку {из списка выполняется L"InstallServices"} {из списка выполняется L"[LICENSES=...} ошибка!!!!!! --------- 3 --------------- возможно проблема никак не связяна с msi вообще а находится в dll-функции, которая должна всё-таки вызываться, когда выполняется L"[LICENSES=... В пользу этого говорит то, что FineReader не запускается. http://lists.etersoft.ru/pipermail/wine-patches/2009-January/000195.html после применения патча, установка завершается успешно. Патч, исправляющий данный баг, приводит к появлению проблем с MS Office XP (баг #2658). Откатил патч: commit d0735ff01db8ee86b9cf08be4ba750e33f903c73 Author: Anton Rudnev <mibori@builder.office.etersoft.ru> Date: Wed Dec 10 15:07:14 2008 +0300 msi: eterbug-807, fix CreateServiceW(...,LPCWSTR lpBinaryPathName , ...) invalid service argumen В версии winehq появились похожие изменения. Надо бы проверить нужен ли ещё этот патч. wine@eterhack bottle bugs/7475 WINE@Etersoft version 1.3.27-eter1.7 Установка происходит нормально. Abby FineReader 9.0 Откатил патч "msi: fix deferred execution custom actions behaviour in ACTION_CustomAction(...). Eterbug 807.", т.к. он вызывает проблемы с установкой Гаранта: http://bugs.etersoft.ru/show_bug.cgi?id=7625#c9 Раз уж бага на мне,то: Подтверждаю, Fine Reader 9.0 падает 1.3.35/2.0.0-eter1.2/2 eterhack bottle bugs/807 Давайте ещё раз проверим, на 2.1 Задача неактуальна, как и не актуален релиз 2.1 |