M>Как я понял из статьи Использование ATL Registrar функция DllRegisterServer кроме что вносить регистрационную запись о регистрируемом COM-объекте в ветвь реестра HKCR, ничего не делает. Значит, ограничение прав на запись в этот раздел реестра. M>И кроме этого, программа-регистратор ничего не знает о регистрируемом COM-oбекте, кроме динамической библиотеки, в которой он реализован.
При регистрации СОМ объекта в своей программе вызов функции CODllRegisterServer из своей задачи выдает ошибку 0x80070005 "Отказано в доступе" Системная утилита Regsvr32 регистрирует COM-объекты только когда запущена под администратором системы. Думаю, для регистрации новых COM-объектов не хватает каких-то привилегий
Здравствуйте, Melamed, Вы писали:
M>При регистрации СОМ объекта в своей программе вызов функции CODllRegisterServer из своей задачи выдает ошибку 0x80070005 "Отказано в доступе" Системная утилита Regsvr32 регистрирует COM-объекты только когда запущена под администратором системы. Думаю, для регистрации новых COM-объектов не хватает каких-то привилегий
Очевидно админских прав не хватает, в реестр писать оно не может (HKLM)
Да, можно регистрировать только для пользователя, тогда админские права не нужны.
regsvr32 /i:user name.dll
Но вообще это нехорошо (самостоятельно регистрировать DLL).
По-нормальному это должна быть работа инсталлятора.
Да, а что такое "CODllRegisterServer"? Гугл дает 0 результатов поиска
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, Melamed, Вы писали:
M>>При регистрации СОМ объекта в своей программе вызов функции CODllRegisterServer из своей задачи выдает ошибку 0x80070005 "Отказано в доступе" Системная утилита Regsvr32 регистрирует COM-объекты только когда запущена под администратором системы. Думаю, для регистрации новых COM-объектов не хватает каких-то привилегий
bnk>Очевидно админских прав не хватает, в реестр писать оно не может (HKLM) bnk>Да, можно регистрировать только для пользователя, тогда админские права не нужны.
bnk>regsvr32 /i:user name.dll
bnk>Но вообще это нехорошо (самостоятельно регистрировать DLL).
А как же программы с частично открытой архитектурой. Когда программе можно писать расширения. Например, модули расширения Microsoft Office представляют собой COM-объект и я не помню, что я его регистрировал с помощью RegSvr32, а просто регистрировал в программе bnk>По-нормальному это должна быть работа инсталлятора.
Предлагаешь, написать все 50-60 COM-объектов, сразу, когда пользователь может уже работать с 5 СOM-объектами. bnk>Да, а что такое "CODllRegisterServer"? Гугл дает 0 результатов поиска
Извините описался. Конечно DllRegisterServer
Запреты в программировании — дело условное. Если ты понимаешь, к чему он может привести, то можешь его нарушать, но на твоей ответственности нормальная работа системы. Если ты не понимаешь, к чему приведет нарушение данного запрета, то он не до конца понимает данный механизм операционной системы
Здравствуйте, Melamed, Вы писали:
bnk>>Но вообще это нехорошо (самостоятельно регистрировать DLL). M>А как же программы с частично открытой архитектурой. Когда программе можно писать расширения. Например, модули расширения Microsoft Office представляют собой COM-объект и я не помню, что я его регистрировал с помощью RegSvr32, а просто регистрировал в программе
Не понял. Программы с частично открытой архитектурой вообще не обязаны использовать COM, насколько я понимаю.
Я же не говорю что нельзя зарегистрировать программно (тот же regsvr32 это как-то делает), скорее о том, что лучше регистрировать с помощью инсталлятора. И де-регистрировать аналогично.
Еще, не обязательно же регистрировать дергая DllRegisterServer, можно напрямую записать в реестр все что требуется.
bnk>>По-нормальному это должна быть работа инсталлятора. M>Предлагаешь, написать все 50-60 COM-объектов, сразу, когда пользователь может уже работать с 5 СOM-объектами.
Тоже не понял. Какая разница сколько там объектов.
Когда устанавливается программа, ее установщик регистрирует все что нужно. Сколько нужно столько и регистрирует, хоть 5 хоть 50.
bnk>>Да, а что такое "CODllRegisterServer"? Гугл дает 0 результатов поиска M>Извините описался. Конечно DllRegisterServer
Если нужно зарегистрировать только для текущего пользователя (HKCU), т.е. вызвать "regsvr32 /i: user name.dll", и name.dll это поддерживает, можно попробовать DllInstall(TRUE, "user") вместо DllRegisterServer
M>Запреты в программировании — дело условное. Если ты понимаешь, к чему он может привести, то можешь его нарушать, но на твоей ответственности нормальная работа системы. M>Если ты не понимаешь, к чему приведет нарушение данного запрета, то он не до конца понимает данный механизм операционной системы
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, Melamed, Вы писали:
bnk>>>Но вообще это нехорошо (самостоятельно регистрировать DLL). M>>А как же программы с частично открытой архитектурой. Когда программе можно писать расширения. Например, модули расширения Microsoft Office представляют собой COM-объект и я не помню, что я его регистрировал с помощью RegSvr32, а просто регистрировал в программе
bnk>Не понял. Программы с частично открытой архитектурой вообще не обязаны использовать COM, насколько я понимаю. bnk>Я же не говорю что нельзя зарегистрировать программно (тот же regsvr32 это как-то делает), скорее о том, что лучше регистрировать с помощью инсталлятора. И де-регистрировать аналогично. bnk>Еще, не обязательно же регистрировать дергая DllRegisterServer, можно напрямую записать в реестр все что требуется.
Как я понял из статьи Использование ATL Registrar функция DllRegisterServer кроме что вносить регистрационную запись о регистрируемом COM-объекте в ветвь реестра HKCR, ничего не делает. Значит, ограничение прав на запись в этот раздел реестра.
И кроме этого, программа-регистратор ничего не знает о регистрируемом COM-oбекте, кроме динамической библиотеки, в которой он реализован.
bnk>>>По-нормальному это должна быть работа инсталлятора. M>>Предлагаешь, написать все 50-60 COM-объектов, сразу, когда пользователь может уже работать с 5 СOM-объектами.
bnk>Тоже не понял. Какая разница сколько там объектов. bnk>Когда устанавливается программа, ее установщик регистрирует все что нужно. Сколько нужно столько и регистрирует, хоть 5 хоть 50.
bnk>Если нужно зарегистрировать только для текущего пользователя (HKCU), т.е. вызвать "regsvr32 /i: user name.dll", и name.dll это поддерживает, можно попробовать DllInstall(TRUE, "user") вместо DllRegisterServer
Идея хорошая. Надо попробовать
M>>Запреты в программировании — дело условное. Если ты понимаешь, к чему он может привести, то можешь его нарушать, но на твоей ответственности нормальная работа системы. M>>Если ты не понимаешь, к чему приведет нарушение данного запрета, то он не до конца понимает данный механизм операционной системы
bnk>Ну да, классика кун-фу