OutProc COM object caller
От: StepanM Россия  
Дата: 28.09.10 11:30
Оценка:
Добрый день!

Есть ли способ из COM-объекта в OutProc COM сервере получить информацию о процессе, который его вызывает.

Спасибо
Re: OutProc COM object caller
От: Vi2 Удмуртия http://www.adem.ru
Дата: 28.09.10 17:06
Оценка:
Здравствуйте, StepanM, Вы писали:

SM>Есть ли способ из COM-объекта в OutProc COM сервере получить информацию о процессе, который его вызывает.


Нет, да и зачем? Если очень нужен, сделай требование на интерфейс. Как это сделано для I****Site интерфейсов (например, IActiveScriptSite) — без них объект не работает.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: OutProc COM object caller
От: Аноним  
Дата: 29.09.10 11:10
Оценка:
SM>>Есть ли способ из COM-объекта в OutProc COM сервере получить информацию о процессе, который его вызывает.

Vi2>Нет, да и зачем? Если очень нужен, сделай требование на интерфейс. Как это сделано для I****Site интерфейсов (например, IActiveScriptSite) — без них объект не работает.


Нет возможности менять клиентов COM сервера. А некоторую инфу о них получить хотелось бы.
Re[3]: OutProc COM object caller
От: Jolly Roger  
Дата: 29.09.10 12:38
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Нет возможности менять клиентов COM сервера. А некоторую инфу о них получить хотелось бы.


А какую именно информацию Вы хотели-бы получить? В принципе есть решение в виде интерфейса IStdMarshalInfo, который позволяет серверу внедрить свой код в клиентский процесс. Мне, правда, использовать его не доводилось, так, игрался маленько когда-то
"Нормальные герои всегда идут в обход!"
Re[2]: OutProc COM object caller
От: OlegMB  
Дата: 29.09.10 13:40
Оценка:
Здравствуйте, Vi2, Вы писали:

SM>>Есть ли способ из COM-объекта в OutProc COM сервере получить информацию о процессе, который его вызывает.

Vi2>Нет, да и зачем?
Кстати, а если упростить задачу: понять, вызов пришел из текущего процесса или из внешнего?
Re[3]: OutProc COM object caller
От: Vi2 Удмуртия http://www.adem.ru
Дата: 29.09.10 14:44
Оценка:
Здравствуйте, OlegMB, Вы писали:

OMB>Кстати, а если упростить задачу: понять, вызов пришел из текущего процесса или из внешнего?


Т.е. у тебя проблемы в определении, есть ли внешние клиенты? Есть интерфейс IExternalConnection, который помогает в этом деле.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[4]: OutProc COM object caller
От: StepanM Россия  
Дата: 29.09.10 15:14
Оценка: :)
Здравствуйте, Jolly Roger, Вы писали:

JR>А какую именно информацию Вы хотели-бы получить? В принципе есть решение в виде интерфейса IStdMarshalInfo, который позволяет серверу внедрить свой код в клиентский процесс. Мне, правда, использовать его не доводилось, так, игрался маленько когда-то


Есть шарный outproc com server. Его юзают различные приложения (обычные десктопные, скрипты, XL-ные спредшиты). Изначально никакой системы идентификации клиентких приложений реализовано не было. Но хотелось-бы получать какую-либо информацию о процессе, из которого приходит вызов метода com server-а, чтобы лучше понимать, кто, как и что вызывал. При этом модификация клиентов не желательна.
Re[5]: OutProc COM object caller
От: Jolly Roger  
Дата: 30.09.10 02:21
Оценка:
Здравствуйте, StepanM, Вы писали:

JR>>А какую именно информацию Вы хотели-бы получить?

SM>хотелось-бы получать какую-либо информацию о процессе

Ага, Вы потом с какой-нибудь информацией чего-нибудь сотворите, а я отвечай!

Нет, ну я как-то могу представит, для чего может понадобиться... ну там PID процесса или имя класса окна, но вот что делать с "какой-нибудь" информацией, я даже представить себе боюсь

Вы всё-таки определитесь, какая именно Вам информация нужна. А вообще, если действия сервера должны зависеть от возможностей клиента, то пусть клиент и сообщает серверу о своих capabilites, вот как, например, это предусмотрено в HTTP. Заведите для этого специальный метод, а лучше отдельный интерфейс.
"Нормальные герои всегда идут в обход!"
Re[4]: OutProc COM object caller
От: OlegMB  
Дата: 30.09.10 11:13
Оценка:
Здравствуйте, Vi2, Вы писали:

OMB>>Кстати, а если упростить задачу: понять, вызов пришел из текущего процесса или из внешнего?

Vi2>Т.е. у тебя проблемы в определении, есть ли внешние клиенты?
Нет. При вызове метода объекта надо знать, этот вызов пришел из текущего процесса или извне.
Re[5]: OutProc COM object caller
От: Vi2 Удмуртия http://www.adem.ru
Дата: 30.09.10 11:34
Оценка:
Здравствуйте, OlegMB, Вы писали:

OMB>>>Кстати, а если упростить задачу: понять, вызов пришел из текущего процесса или из внешнего?

Vi2>>Т.е. у тебя проблемы в определении, есть ли внешние клиенты?
OMB> Нет. При вызове метода объекта надо знать, этот вызов пришел из текущего процесса или извне.

Загадками говорить изволишь. Jolly Roger вроде предложил тебе способ. Здесь на сайте есть описание механизма маршаллинга. Вот там можно внедриться в процесс [сервер-стаб]-[прокси-клиент] и реализовать свою функциональность. И тут тебе вряд ли кто поможет, т.к. это обычно не далают. Можно было бы поиграть с интерфейсами, но ты говоришь, что их менять нельзя, но посмотри описание [call_as] атрибута, он тоже может влиять на маршаллинг.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[6]: OutProc COM object caller
От: StepanM Россия  
Дата: 30.09.10 12:20
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>Вы всё-таки определитесь, какая именно Вам информация нужна. А вообще, если действия сервера должны зависеть от возможностей клиента, то пусть клиент и сообщает серверу о своих capabilites, вот как, например, это предусмотрено в HTTP. Заведите для этого специальный метод, а лучше отдельный интерфейс.


Грубо говоря нужно логгировать какой клиент какой метод вызывал. Задача -- определить клиента в момент вызова. Как -- это тоже вопрос. Зависит от того, что можно (и можно ли вообще) узнать о клиенте в момент вызова. Если можно получить хэндл процесса. То можно и через процесс по окнам что-то пытаться выяснить.
Клиенты могут разные: другие приложения, сприпты, спредшиты.
Re[7]: OutProc COM object caller
От: Jolly Roger  
Дата: 30.09.10 14:15
Оценка:
Здравствуйте, StepanM, Вы писали:

SM>Грубо говоря нужно логгировать какой клиент какой метод вызывал. Задача -- определить клиента в момент вызова. Как -- это тоже вопрос. Зависит от того, что можно (и можно ли вообще) узнать о клиенте в момент вызова. Если можно получить хэндл процесса. То можно и через процесс по окнам что-то пытаться выяснить.

SM>Клиенты могут разные: другие приложения, сприпты, спредшиты.

Ох-хо-хо... Да что значит "какой клиент"? Имя пользователя что-ли, под которым клиентское приложение работает? Тогда CoQueryClientBlanket, вот здесь подробно.

Если не угадал — всё, я — пас, "мая твая не панимай"
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.