Вот такие отладочные сообщения > > 1С отображает на экране свое окно, а затем выдает сначала сообщение > > "HASP HL Protection System > > Error 1009: Cannot open HASP HL drivers" > > и затем по нажатию "ОК" еще одно сообщение > > "Не найден ключ защиты Континент:Страхование!!!". > > При этом в окне служебных сообщений: > > {МодульПриложения(617)}: Ошибка при вызове конструктора (СОМОбъект): > > Unknown error 0x800401F3
Так же ошибка при регистрации regsvr32 Kont.dll Проблема в том, что DLL обращается к драйверам локального ключа, несмотря на то, что используется сетевой ключ. Проверили на Windows удалением драйверов. Ждём реализации загрузки драйверов.
Бутылка rt/9051, конфигурация лежит в c:\Conf там же и dll'ка Ключ сетевой, сейчас на lin-test. ------- Комментарий #2 от Александр Морозов 2008-12-30 14:07:03 При выполнении "regsvr32 Kont.dll" при эмуляции Windows XP делаются попытки открыть \\.\NTICE1340, \\.\NTICE, \\.\FEnteDev, при эмуляции Windows 98 - \\.\SIWVID, \\.\HARDLOCK.VXD
*** Bug 3176 has been marked as a duplicate of this bug. ***
Если загружен драйвер, создающий устройство \\.\FEnteDev, то winexp regsvr32 Kont.dll выводит ошибку "Error 7: HASP HL Key not found" вместо "Error 1009: Cannot open HASP HL drivers" и в логе WINEDEBUG=+file появляется nethasp.ini
Добавил драйвер, создающий устройство \\.\FEnteDev, в cvs-репозиторий wine-etersoft.
При использовании упомянутого выше драйвера и наличии ключа в lin-test DLL регистрируется успешно: <wine@cellar bottle rt/9051>$ winexp regsvr32 Kont.dll Running in NT environment... fixme:ntoskrnl:IoRegisterDeviceInterface 0x111938 {608225bc-766b-40a8-b8a4-d96bc999ae35} <null> 0x111b38 fixme:ntoskrnl:IoRegisterDeviceInterface 0x111988 {10d60713-fb4c-4bb1-941b-44b79d25af8b} <null> 0x111404 fixme:ntoskrnl:IoSetDeviceInterfaceState (null) 1 Successfully registered DLL Kont.dll Надо протестировать с новой закрытой частью.
Сборка 40/17 Всё работает. <wine@cellar bottle rt/9051>$ winexp regsvr32 Kont.dll Running in NT environment... fixme:ntoskrnl:IoRegisterDeviceInterface 0x111938 {608225bc-766b-40a8-b8a4-d96bc999ae35} <null> 0x111b38 fixme:ntoskrnl:IoRegisterDeviceInterface 0x111988 {10d60713-fb4c-4bb1-941b-44b79d25af8b} <null> 0x111404 fixme:ntoskrnl:IoSetDeviceInterfaceState (null) 1 Successfully registered DLL Kont.dll
Но при запуске по-прежнему "Не найден ключ защиты Континент:Страхование!!!"
На lin-test ключ стоит и работает: HASP Net at host (see NETHASP.INI) (press Ctrl-C to break): ..... -- active logins: 1 -- max logins: 5 -- key type: HASP4 Net 5 licenses -- activations: 65535 [ 4] 1C:Accountancy v7.7 (simple and network) В бутылке rt/9051 в nethasp.ini прописан lin-test (и пингуется) Но всё равно пишет, что ключа нет.
Kont.dll регистрируется успешно. Но при попытке запустить конфигурацию вылетает та же ошибка что и была: {МодульПриложения(617)}: Ошибка при вызове конструктора (СОМОбъект): Unknown error 0x800401F3 В этом вся проблема.
В исходниках в файле winerror.c нашел такую строчку : #define CO_E_CLASSSTRING _HRESULT_TYPEDEF_(0x800401F3L) Надо разбираться что и как.
В этих местах видимо происходит ошибка: trace:reg:NtOpenKey (0x20c,L"WbemScripting.SWbemLocator\\CLSID",f003f,0x32e6c0) trace:reg:NtOpenKey <- (nil) ... trace:reg:NtOpenKey (0x20c,L"winmgmts\\CLSID",f003f,0x32d9f4) trace:reg:NtOpenKey <- (nil)
Ошибку по прежнему можно увидеть в бутылке: rt/9051
ПРоверил еще раз. Дело не в ключе. 1.0.10 eter11/eter7
Повышаю приоритет. Нужно сделать.
Поведение поменялось, когда, пробуя подставить виндовые библиотеки, зарегистрировал wbemdisp.dll - необходимый ключ хранится в ней. Теперь - ошибка: err:ole:apartment_getclassobject DllGetClassObject returned error 0x80004002 err:ole:create_server class {172bddf8-ceea-11d1-8b05-00600806d9b6} not registered fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported err:ole:CoGetClassObject no class object {172bddf8-ceea-11d1-8b05-00600806d9b6} could be created for context 0x15 Оболочка 1С сообщает о вощникшей ошибке и предлагает закрыть программу.
(In reply to comment #16) Предлагаю дальнейшее обсуждение по WBEM вести в # 3707.
Добавили в wine библиотеку wbemdisp. Пользы это никакой не принесло. В библеотеке сделаны ISWbemLocator и ISWbemServices. Ещё запрашивается IConnectionPointContainer и несколько других интерфейсов. На данный момент падает в модуле 1С после обращения к IClassFactory_QueryInterface с riid, равным NULL (!) Так не бывает, на этом идеи пока закончились...
Добавляемый код выложу куда-нибудь отдельно. Коммитить его на данном этапе - пустое занятие, dll не работоспособна. Да и мусорка в коде функций та ещё...
Решаем wbem в другой баге. После реализации wbemdisp.dll нужно проверить.
Нет оснований считать, что ключ защиты не работает. Проблема загрузки конфигурации упирается в другие методы защиты конфигурации.