Функция КаталогLocalAppData() App = Новый COMОбъект("Shell.Application"); Приводит к "Ошибка при вызове конструктора (ComObject): Unknown error 0x80004002
Объект 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
warn:ole:CLSIDFromProgID couldn't open key for ProgID L"Shell.Application" Внесение записи в реестр (в аттаче) всё равно не позволяет программе найти ProgID
Created attachment 1161 [details] импортируемый реестр Кусок реестра, экспортированный с win2k3, должен добавлять информацию об объекте Shell.Application
Created attachment 1163 [details] реестр реестр, содержащий нужный ProgID (в дополнение к первому аттачу)
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
Ещё одна заявка с этой ошибкой, правда работать не мешает. Какая ситуация - чего не хватает для поддержки, что нужно сделать, где зависимая бага и прогноз трудоемкости?
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
После того, как у нас не регистрировался msxml, меня очень смущает эта строчка в логе: err:ole:COMPOBJ_DllList_Add couldn't load in-process dll L"%" Может, у нас опять что-то регистрируется неправильно?
Полезные ссылки: 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 его нет.
Сделал стаб для интерфейса IShellDispatch.
Реализовал создание ключей реестра Shell.Application при выполнении regsvr32 shell32.dll.
Занимался реализацией методов IDispatch интерфейса IShellDispatch.
> Занимался реализацией методов IDispatch интерфейса IShellDispatch. Готово. Отправил патчи в wine-patches-test.
Закрываю.