Здравствуйте, okman, Вы писали:
O>Здравствуйте, yakovchuck, Вы писали:
Y>>Есть com exe сервер. Com реализован используя ATL как синглтон через добавление DECLARE_CLASSFACTORY_SINGLETON. Есть shell extension (расширяет контекстное меню по папке). Синглтон уже создан в отдельном процессе. Теперь нужно к нему получить доступ из shell extension, но при вызове CoCreateInstanse я получаю не уже существующий COM объект, а создается новый. Т.е. синглтона как бы и нет. Windows 7, x64. Все участнике этого дела собраны под x64 платформу. Кто знает, в чем может быть дело ?
O>Дело в том, что клиент и сервер не должны работать в одном процессе, если у них разные
O>контексты безопасности, например, когда они запущены от разных пользователей или (Vista и выше)
O>выполняются на разных integrity levels. Это было бы серъезной уязвимостью.
O>Поэтому для разных клиентов среда COM создает разные экземпляры серверов.
O>Чтобы этого избежать, нужно указать системе создавать экземпляры сервера от одной конкретной
O>учетной записи и настроить доступ. Для этого используются соответствующие параметры внутри ключа
O>AppId, такие как RunAs, AccessPermission, LaunchPermission, AuthenticationLevel и другие.
O>Могу порекомендовать к прочтению вот эту статью — http://www.rsdn.ru/article/com/comsec.xmlАвтор(ы): Владислав Чистяков
Дата: 28.01.2002
O>Также поиск по ключевым словам "COM синглетон" и "ATL синглетон" должен дать результаты.
Да вот как-то все в инете не густо по этому вопросу. Может кто-то уже сталкивался и решал такую проблему, я не думаю что она такая уж редкая.