Несколько экземпляров приложения
От: Anatoliy.Sviridenkov Россия  
Дата: 29.02.12 22:06
Оценка:
Здравствуйте.
Мне необходимо наладить связь между двумя приложениями. Решено использовать COM для межпроцессного взаимодействия. Одно приложение COM сервер, другое COM клиент. Использовал ATL, VS 2008. COM сервер на основе exe, свободная поточная модель, manual интерфейс с поддержкой oleautomation и connections point, интерфейсы простенькие, основную часть работы проделали визарды. Фабрику настроил по синглтон (DECLARE_CLASSFACTORY_SINGLETON). Все работает нормаль, но есть проблема. Если запустить несколько клиентов, то все они обращаются к одному экземпляру приложения, к одному серверу. Но этот СОМ сервер всегда запускаемый самой СОМ остнасткой. Мне же надо, чтобы подхватывалось приложение запущенное пользователем, и только если ничего не запущено, то новое.
Почему-то приложение запускаемое пользователем игнорируется.

Код WinMain, :

class СSettingsModule : public CAtlExeModuleT< CSettingsModule >
{
public :
    DECLARE_LIBID(LIBID_SettingsLib)
    DECLARE_REGISTRY_APPID_RESOURCEID(IDR_SETTINGS, "{D43FDEA6-2222-3843-FFFE-FFDDBBAAEE3E}")
};

extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/, 
                                LPTSTR /*lpCmdLine*/, int nShowCmd)
{
    return _AtlModule.WinMain(nShowCmd);
}


Подскажите, куда копать?
atl singleton
Re: Несколько экземпляров приложения
От: krizis  
Дата: 01.03.12 01:10
Оценка:
Здравствуйте, Anatoliy.Sviridenkov, Вы писали:

AS>Здравствуйте.

AS> Все работает нормаль, но есть проблема. Если запустить несколько клиентов, то все они обращаются к одному экземпляру приложения, к одному серверу. Но этот СОМ сервер всегда запускаемый самой СОМ остнасткой. Мне же надо, чтобы подхватывалось приложение запущенное пользователем, и только если ничего не запущено, то новое.
AS>Почему-то приложение запускаемое пользователем игнорируется.



AS>Подскажите, куда копать?



Очень может быть, в сторону безопасности.
Re: Несколько экземпляров приложения
От: dudkin  
Дата: 01.03.12 01:55
Оценка: 10 (2)
Здравствуйте, Anatoliy.Sviridenkov, Вы писали:

AS> Все работает нормаль, но есть проблема. Если запустить несколько клиентов, то все они обращаются к одному экземпляру приложения, к одному серверу. Но этот СОМ сервер всегда запускаемый самой СОМ остнасткой. Мне же надо, чтобы подхватывалось приложение запущенное пользователем, и только если ничего не запущено, то новое.


ну так а почему они "не подхватывается" ? потому что когда запустил пользователь экзешник обьект "самой СОМ остнасткой" не создается и не регистрируется в ROT. OLE резонно полагает что обьекта-синглтона такого нету и пора ка теперь его запустить по всем правилам со всеми идиотскими ключами навроде /embedded.
копать в сторону CoRegisterClassObject и IRunningObjectTable::Register
а вот еще что! на самом деле таблицы ROT они для разных integrity разные то есть под администратором и юзером мож будет два синглетона запущено
Re[2]: Несколько экземпляров приложения
От: Anatoliy.Sviridenkov Россия  
Дата: 01.03.12 08:48
Оценка:
Здравствуйте, dudkin, Вы писали:

D>а вот еще что! на самом деле таблицы ROT они для разных integrity разные то есть под администратором и юзером мож будет два синглетона запущено


Спасибо! В ROT я регистрировал, а вот COM сервер под админом жил. Совершенно этот факт из головы вылетел.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.