| Summary: | Unable to create InstallDriver instance | ||
|---|---|---|---|
| Product: | WINE@Etersoft | Reporter: | Patsev Anton <chemtech> |
| Component: | Установка программ / MSI | Assignee: | Anton Rudnev <mibori> |
| Status: | CLOSED FIXED | QA Contact: | |
| Severity: | major | ||
| Priority: | P1 | CC: | kondratyuk, lav |
| Version: | 1.0.9 | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Debian GNU/Linux | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | ||
| Дата напоминания: | |||
| Bug Depends on: | |||
| Bug Blocks: | 2710 | ||
|
Description
Patsev Anton
2008-10-28 11:01:17 MSK
Версия 1С Предприятие 8.0: 8.0.18.2 Какую проблему вызывает эта ошибка? Не устанавливается. Устанавливаете командой $ winexp setup.exe ? Устанавливаю:
winexp autorun.exe
Running in NT environment...
fixme:msg:pack_message msg 14 (WM_ERASEBKGND) not supported yet
ALSA lib seq_hw.c:457:(snd_seq_hw_open) open /dev/snd/seq failed: No such file or directory
ALSA lib seq_hw.c:457:(snd_seq_hw_open) open /dev/snd/seq failed: No such file or directory
fixme:storage:StgCreateDocfile Storage share mode not implemented.
fixme:rpc:RpcMgmtWaitServerListen not waiting for server calls to finish
fixme:rpc:RpcImpersonateClient (0x15bfec8): stub
fixme:ole:NdrClearOutParameters (0x33c698,0x7e6e75ba,0x15c86e0): stub
fixme:rpc:RpcRevertToSelfEx (0x15bfec8): stub
fixme:rpc:RpcImpersonateClient (0x15d22b0): stub
fixme:rpc:RpcRevertToSelfEx (0x15d22b0): stub
fixme:rpc:RpcImpersonateClient (0x15d24c0): stub
fixme:rpc:RpcRevertToSelfEx (0x15d24c0): stub
fixme:rpc:RpcImpersonateClient (0x15d26f0): stub
fixme:rpc:RpcRevertToSelfEx (0x15d26f0): stub
fixme:msi:msi_unimplemented_action_stub MsiUnpublishAssemblies -> 2 ignored L"MsiAssembly" table values
fixme:msi:msi_unimplemented_action_stub UnregisterTypeLibraries -> 3 ignored L"TypeLib" table values
fixme:msi:msi_unimplemented_action_stub UnregisterClassInfo -> 1 ignored L"AppId" table values
fixme:msi:msi_unimplemented_action_stub UnregisterProgIdInfo -> 9 ignored L"ProgId" table values
fixme:msi:msi_unimplemented_action_stub RemoveShortcuts -> 12 ignored L"Shortcut" table values
fixme:rpc:RpcImpersonateClient (0x15fe270): stub
fixme:rpc:RpcRevertToSelfEx (0x15fe270): stub
fixme:msi:MsiGetMode 2 6
fixme:rpc:RpcImpersonateClient (0x15ff068): stub
fixme:rpc:RpcRevertToSelfEx (0x15ff068): stub
fixme:rpc:RpcImpersonateClient (0x15ff068): stub
fixme:rpc:RpcRevertToSelfEx (0x15ff068): stub
fixme:msi:install_assembly Manifest unhandled
fixme:msi:install_assembly Win32 assemblies not handled
fixme:msi:install_assembly Manifest unhandled
fixme:msi:install_assembly Win32 assemblies not handled
fixme:rpc:RpcImpersonateClient (0x1602380): stub
err:ole:CoGetClassObject class {f618c514-dfb8-11d1-a2cf-00805fc79235} not registered
err:ole:CoGetClassObject class {f618c514-dfb8-11d1-a2cf-00805fc79235} not registered
err:ole:create_server class {f618c514-dfb8-11d1-a2cf-00805fc79235} not registered
fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported
err:ole:CoGetClassObject no class object {f618c514-dfb8-11d1-a2cf-00805fc79235} could be created for context 0x17
err:ole:CoGetClassObject class {f618c514-dfb8-11d1-a2cf-00805fc79235} not registered
err:ole:CoGetClassObject class {f618c514-dfb8-11d1-a2cf-00805fc79235} not registered
err:ole:create_server class {f618c514-dfb8-11d1-a2cf-00805fc79235} not registered
fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported
err:ole:CoGetClassObject no class object {f618c514-dfb8-11d1-a2cf-00805fc79235} could be created for context 0x17
fixme:netapi32:NetUserAdd ((null), 1, 0x33b468, 0x33b460) stub!
fixme:netapi32:NetUserGetLocalGroups ((null), L"USER1CV8SERVER", 0, 00000001, 0x33b43c -1, 0x33b444, 0x33b490) stub!
И 1С выдает ошибку:
При регистрации COM+ приложения произошла ошибка (код ошибки = 8ad). Вам необходимо зарегестировать это приложение вручную.
Только сейчас заметил что 8.0. А почему autorun? Там же наверное есть и собственно дистрибутив с setup.exe? 1C 8.0 установилась нормально под winexp. А вот обновление до 8.0.18.2 вываливается с ошибкой msi. err:msi:ACTION_InstallFiles compressed file wasn't extracted (L"C:\\Program Files\\1cv8\\bin\\ru\\BP.res") err:msi:ITERATE_Actions Execution halted, action L"InstallFinalize" returned 1603 после обновления вайна поведение изменилось. Теперь с той же ошибкой 1603 вываливается на другом файле (wbase.dll) Ясно одно -- после выполнения msi_cabextract() остаются не распакованы те файлы, которые уже существовали в Program Files Так, если wbase.dll удалить из Program Files, то msi_cabextract() изменит его состояние на msifs_installed и программа завершится с ошибкой 1603 уже на другом файле. Также, похоже, что проблема никак не связана с регистром литер в имени файла. для проведения экспериментов на extrac32 /E Data1.cab взял два файла
BP.dll -- который всегда создаётся
BP.res -- который никогда не создаётся
функция, которая вызывает CreateFile для создания файла - это sc_cb_open в setupcab.c . Она же и возвращает хэндл, полученный от CreateFile.
Функция CreateFile и для первого и для второго файла вызывается абсолютно идентично. Вот куски лога полученного за один extrac32-запуск:
для BP.dll с проверкой существования файла ди после вызова CreateFile:
***sc_cb_open("BP.dll", 8101, 180) before CreateFileA(), file_exist->no
***sc_cb_open("BP.dll", 8101, 180) before CreateFileA(ioflag=40000000, sharing=3, sa={nLength=c, bInheritHandle = 1}, creation=4)
CreateFileW -> L"BP.dll" GENERIC_WRITE FILE_SHARE_READ FILE_SHARE_WRITE creation 4 attributes 0x80
***sc_cb_open("BP.dll", 8101, 180) after CreateFileA(), file_exist->yes
***sc_cb_open("BP.dll", 8101, 180) ret -> 44
для BP.res с проверкой существования файла до и после вызова CreateFile:
***sc_cb_open("BP.res", 8101, 180) before CreateFileA(), file_exist->no
***sc_cb_open("BP.res", 8101, 180) before CreateFileA(ioflag=40000000, sharing=3, sa={nLength=c, bInheritHandle = 1}, creation=4)
CreateFileW -> L"BP.res" GENERIC_WRITE FILE_SHARE_READ FILE_SHARE_WRITE creation 4 attributes 0x80
***sc_cb_open("BP.res", 8101, 180) after CreateFileA(), file_exist->no
***sc_cb_open("BP.res", 8101, 180) ret -> 44
Соответственно в обоих случаях она возвращает хэндл.
Как видно из куска одного лога, разница между вызовами в том, что в первом случае она создаёт файл, а во втором -- нет.
несмотря на исследование в http://bugs.etersoft.ru/show_bug.cgi?id=2873 установка обновления под виндой происходит нормально (с установкой BP.res ёмкостью 12288 байт). Вероятно, в процессе установки под виндой используются какие-то другие способы распаковки. Патч - http://lists.etersoft.ru/pipermail/wine-patches/2008-November/000077.html В функции ACTION_InstallFiles, после того, как функция FDICopy распаковывает Data1.cab, на дублирующимся файле не ставится file->stat в msifs_installed Патч добавляет проверку существования файла в этом случае, и не допускает прерывание процесса инсталляции, если файл уже существует. |