Bug 3850

Summary: Не работает вызов "Shell.Application" в 1С
Product: WINE@Etersoft Reporter: Igor Talanov <igor>
Component: OLE / DDE / RPCAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P3 CC: amorozov, baraka, lav, shpigor, stas
Version: 1.0.11   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: 10055, 10994, 11537 Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 42, 5634, 6182, 6276    
Attachments: импортируемый реестр
реестр

Description Igor Talanov 2009-04-20 18:57:55 MSD
Функция КаталогLocalAppData()
App = Новый COMОбъект("Shell.Application");

Приводит к
"Ошибка при вызове конструктора (ComObject): Unknown error 0x80004002
Comment 1 Vitaly Lipatov 2009-04-20 19:21:26 MSD
Объект Shell.Application представляет графическую оболочку Windows - Windows Explorer.
Dim oShell
Set oShell = CreateObject("Shell.Application")
oShell.TrayProperties()
oShell.SetTime()

http://www.askit.ru/custom/progr_admin/m07/07_02_shell_application.htm
Comment 2 Константин Кондратюк 2009-04-22 18:16:15 MSD
warn:ole:CLSIDFromProgID couldn't open key for ProgID L"Shell.Application"

Внесение записи в реестр (в аттаче) всё равно не позволяет программе найти ProgID
Comment 3 Константин Кондратюк 2009-04-22 18:18:37 MSD
Created attachment 1161 [details]
импортируемый реестр

Кусок реестра, экспортированный с win2k3, должен добавлять информацию об объекте Shell.Application
Comment 4 Константин Кондратюк 2009-04-23 17:59:16 MSD
Created attachment 1163 [details]
реестр

реестр, содержащий нужный ProgID (в дополнение к первому аттачу)
Comment 5 Константин Кондратюк 2009-04-23 18:09:09 MSD
trace:shell:HCR_GetClassNameA -- Shell Automation Service
trace:shell:DllGetClassObject CLSID:
        {13709620-c279-11ce-a49e-444553540000} (Shell Automation Service),IID:
        {00000001-0000-0000-c000-000000000046} (IID_IClassFactory)
trace:shell:HCR_RegOpenClassIDKey CLSID\{13709620-c279-11ce-a49e-444553540000}
trace:reg:NtOpenKey (0x50,L"CLSID\\{13709620-c279-11ce-a49e-444553540000}",20019,0x32e9e8)
trace:reg:NtOpenKey <- 0x60
trace:reg:RegLoadMUIStringW (hKey = 0x60, pwszValue = L"LocalizedString", pwszBuffer = 0x13ff90, cbBuffer = 200, pcbData = (n
il), dwFlags = 0, pwszBaseDir = L"") stub
trace:reg:RegQueryValueExW (0x60,L"LocalizedString",(nil),0x32e948,(nil),0x32e944=0)
trace:reg:NtQueryValueKey (0x60,L"LocalizedString",2,0x32e7c8,12)
trace:reg:RegQueryValueExA (0x60,"",(nil),(nil),0x32ea54,0x32ea08=100)
trace:reg:NtQueryValueKey (0x60,L"",2,0x32e898,256)
trace:shell:HCR_GetClassNameA -- Shell Automation Service
fixme:shell:DllGetClassObject failed for CLSID=
        {13709620-c279-11ce-a49e-444553540000} (Shell Automation Service)
err:ole:apartment_getclassobject DllGetClassObject returned error 0x80040111
Comment 6 Vitaly Lipatov 2009-08-07 12:57:34 MSD
Ещё одна заявка с этой ошибкой, правда работать не мешает.
Какая ситуация - чего не хватает для поддержки, что нужно сделать, где зависимая бага и прогноз трудоемкости?
Comment 7 Константин Кондратюк 2009-10-22 11:40:22 MSD
wine 1.0.11 10/6
бутылка bugs/3850

$ ./run_test.sh
err:ole:CoGetClassObject class {6c736db1-bd94-11d0-8a23-00aa00b58e10} not registered
err:ole:CoGetClassObject no class object {6c736db1-bd94-11d0-8a23-00aa00b58e10} could be created for context 0x1
err:ole:COMPOBJ_DllList_Add couldn't load in-process dll L"%"
err:ole:create_server class {13709620-c279-11ce-a49e-444553540000} not registered
fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported
err:ole:CoGetClassObject no class object {13709620-c279-11ce-a49e-444553540000} could be created for context 0x15
^C<wine@cellar bottle bugs/3850>$ ./run_test.sh
err:ole:CoGetClassObject class {6c736db1-bd94-11d0-8a23-00aa00b58e10} not registered
err:ole:CoGetClassObject no class object {6c736db1-bd94-11d0-8a23-00aa00b58e10} could be created for context 0x1
err:ole:COMPOBJ_DllList_Add couldn't load in-process dll L"%"
err:ole:create_server class {13709620-c279-11ce-a49e-444553540000} not registered
fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported
err:ole:CoGetClassObject no class object {13709620-c279-11ce-a49e-444553540000} could be created for context 0x15
Comment 8 Константин Кондратюк 2009-10-22 12:12:50 MSD
После того, как у нас не регистрировался msxml, меня очень смущает эта строчка в логе:
err:ole:COMPOBJ_DllList_Add couldn't load in-process dll L"%"

Может, у нас опять что-то регистрируется неправильно?
Comment 9 Александр Морозов 2010-12-10 22:00:40 MSK
Полезные ссылки:
http://msdn.microsoft.com/en-us/library/bb774094(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/bb774116(v=VS.85).aspx
http://www.com.it-berater.org/COM/windows_shell/interfaces/IShellDispatch.htm

Баг в апстриме:
http://bugs.winehq.org/show_bug.cgi?id=8987

Добавил IShellDispatch и необходимые ему интерфейсы в shldisp.idl.

В объявлении BrowseForFolder в idl в SDK от MS и в MSDN (http://msdn.microsoft.com/en-us/library/bb774065(v=vs.85).aspx) присутствует тип FOLDER. Непонятно, что это такое. Но midl генерирует h-файл в котором в этом методе вместо FOLDER используется Folder, так что, видимо, можно использовать Folder вместо FOLDER.

Если среди атрибутов интерфейса отсутствует object, то widl генерирует какой-то странный h-файл: без соответствующей интерфейсу структуры, из методов интерфейса генерируются обычные функции без изменения имени. В результате при сборке wine возникает конфликт имён. Добавил object, хотя в idl из SDK его нет.
Comment 10 Александр Морозов 2010-12-14 21:33:42 MSK
Сделал стаб для интерфейса IShellDispatch.
Comment 11 Александр Морозов 2010-12-15 21:13:02 MSK
Реализовал создание ключей реестра Shell.Application при выполнении regsvr32 shell32.dll.
Comment 12 Александр Морозов 2010-12-16 22:52:40 MSK
Занимался реализацией методов IDispatch интерфейса IShellDispatch.
Comment 13 Александр Морозов 2010-12-17 17:17:04 MSK
> Занимался реализацией методов IDispatch интерфейса IShellDispatch.
Готово. Отправил патчи в wine-patches-test.
Comment 14 Денис Баранов 2011-02-06 16:06:18 MSK
Закрываю.