Здравствуйте, Аноним, Вы писали:
А>Нет возможности менять клиентов COM сервера. А некоторую инфу о них получить хотелось бы.
А какую именно информацию Вы хотели-бы получить? В принципе есть решение в виде интерфейса IStdMarshalInfo, который позволяет серверу внедрить свой код в клиентский процесс. Мне, правда, использовать его не доводилось, так, игрался маленько когда-то
Здравствуйте, Jolly Roger, Вы писали:
JR>А какую именно информацию Вы хотели-бы получить? В принципе есть решение в виде интерфейса IStdMarshalInfo, который позволяет серверу внедрить свой код в клиентский процесс. Мне, правда, использовать его не доводилось, так, игрался маленько когда-то
Есть шарный outproc com server. Его юзают различные приложения (обычные десктопные, скрипты, XL-ные спредшиты). Изначально никакой системы идентификации клиентких приложений реализовано не было. Но хотелось-бы получать какую-либо информацию о процессе, из которого приходит вызов метода com server-а, чтобы лучше понимать, кто, как и что вызывал. При этом модификация клиентов не желательна.
Здравствуйте, StepanM, Вы писали:
SM>Есть ли способ из COM-объекта в OutProc COM сервере получить информацию о процессе, который его вызывает.
Нет, да и зачем? Если очень нужен, сделай требование на интерфейс. Как это сделано для I****Site интерфейсов (например, IActiveScriptSite) — без них объект не работает.
SM>>Есть ли способ из COM-объекта в OutProc COM сервере получить информацию о процессе, который его вызывает.
Vi2>Нет, да и зачем? Если очень нужен, сделай требование на интерфейс. Как это сделано для I****Site интерфейсов (например, IActiveScriptSite) — без них объект не работает.
Нет возможности менять клиентов COM сервера. А некоторую инфу о них получить хотелось бы.
Здравствуйте, Vi2, Вы писали:
SM>>Есть ли способ из COM-объекта в OutProc COM сервере получить информацию о процессе, который его вызывает. Vi2>Нет, да и зачем?
Кстати, а если упростить задачу: понять, вызов пришел из текущего процесса или из внешнего?
Здравствуйте, StepanM, Вы писали:
JR>>А какую именно информацию Вы хотели-бы получить? SM>хотелось-бы получать какую-либо информацию о процессе
Ага, Вы потом с какой-нибудь информацией чего-нибудь сотворите, а я отвечай!
Нет, ну я как-то могу представит, для чего может понадобиться... ну там PID процесса или имя класса окна, но вот что делать с "какой-нибудь" информацией, я даже представить себе боюсь
Вы всё-таки определитесь, какая именно Вам информация нужна. А вообще, если действия сервера должны зависеть от возможностей клиента, то пусть клиент и сообщает серверу о своих capabilites, вот как, например, это предусмотрено в HTTP. Заведите для этого специальный метод, а лучше отдельный интерфейс.
Здравствуйте, Vi2, Вы писали:
OMB>>Кстати, а если упростить задачу: понять, вызов пришел из текущего процесса или из внешнего? Vi2>Т.е. у тебя проблемы в определении, есть ли внешние клиенты?
Нет. При вызове метода объекта надо знать, этот вызов пришел из текущего процесса или извне.
Здравствуйте, OlegMB, Вы писали:
OMB>>>Кстати, а если упростить задачу: понять, вызов пришел из текущего процесса или из внешнего? Vi2>>Т.е. у тебя проблемы в определении, есть ли внешние клиенты? OMB> Нет. При вызове метода объекта надо знать, этот вызов пришел из текущего процесса или извне.
Загадками говорить изволишь. Jolly Roger вроде предложил тебе способ. Здесь на сайте есть описание механизма маршаллинга. Вот там можно внедриться в процесс [сервер-стаб]-[прокси-клиент] и реализовать свою функциональность. И тут тебе вряд ли кто поможет, т.к. это обычно не далают. Можно было бы поиграть с интерфейсами, но ты говоришь, что их менять нельзя, но посмотри описание [call_as] атрибута, он тоже может влиять на маршаллинг.
Здравствуйте, Jolly Roger, Вы писали:
JR>Вы всё-таки определитесь, какая именно Вам информация нужна. А вообще, если действия сервера должны зависеть от возможностей клиента, то пусть клиент и сообщает серверу о своих capabilites, вот как, например, это предусмотрено в HTTP. Заведите для этого специальный метод, а лучше отдельный интерфейс.
Грубо говоря нужно логгировать какой клиент какой метод вызывал. Задача -- определить клиента в момент вызова. Как -- это тоже вопрос. Зависит от того, что можно (и можно ли вообще) узнать о клиенте в момент вызова. Если можно получить хэндл процесса. То можно и через процесс по окнам что-то пытаться выяснить.
Клиенты могут разные: другие приложения, сприпты, спредшиты.
Здравствуйте, StepanM, Вы писали:
SM>Грубо говоря нужно логгировать какой клиент какой метод вызывал. Задача -- определить клиента в момент вызова. Как -- это тоже вопрос. Зависит от того, что можно (и можно ли вообще) узнать о клиенте в момент вызова. Если можно получить хэндл процесса. То можно и через процесс по окнам что-то пытаться выяснить. SM>Клиенты могут разные: другие приложения, сприпты, спредшиты.
Ох-хо-хо... Да что значит "какой клиент"? Имя пользователя что-ли, под которым клиентское приложение работает? Тогда CoQueryClientBlanket, вот здесь подробно.
Если не угадал — всё, я — пас, "мая твая не панимай"