COM-сервер сам завершает работу
От: apoheliy  
Дата: 24.02.08 19:18
Оценка:
На MS Windows Server 2003 запущена служба (32-бит) под сетевыми правами. Из этой службы создаётся процесс (32-бит) (назовём P1) под правами пользователя (пользователь в группе администраторов, но в текущий момент не залогинен). Из этого процесса (P1) запускается COM-сервер (out-process, exe-файл) 64-бит. Далее у сервера вызывается метод, который успешно выполняется (т.е. всё создалось, подключилось и работает) и после этого процесс P1 уходит в ожидание, но COM-сервер не релизится (указатель храниться в CComPtr). Примерно через 10 секунд сервер благополучно завершает работу (процесс P1 ему в этом не помогал). После отладки выясняется, что с какого-то боку (неизвестно откуда) на сервер пришёл Release.

Вопрос: откуда это могло прийти (может, операционка постаралась) и что сделать, чтобы COM-сервер нормально продолжал работать?
Re: COM-сервер сам завершает работу
От: Аноним  
Дата: 25.02.08 08:46
Оценка:
Может этот линк будет полезен:
http://support.microsoft.com/kb/935677
Re: COM-сервер сам завершает работу
От: Anton_V1  
Дата: 18.03.08 19:56
Оценка:
Здравствуйте, apoheliy, Вы писали:

A>На MS Windows Server 2003 запущена служба (32-бит) под сетевыми правами. Из этой службы создаётся процесс (32-бит) (назовём P1) под правами пользователя (пользователь в группе администраторов, но в текущий момент не залогинен). Из этого процесса (P1) запускается COM-сервер (out-process, exe-файл) 64-бит. Далее у сервера вызывается метод, который успешно выполняется (т.е. всё создалось, подключилось и работает) и после этого процесс P1 уходит в ожидание, но COM-сервер не релизится (указатель храниться в CComPtr). Примерно через 10 секунд сервер благополучно завершает работу (процесс P1 ему в этом не помогал). После отладки выясняется, что с какого-то боку (неизвестно откуда) на сервер пришёл Release.


A>Вопрос: откуда это могло прийти (может, операционка постаралась) и что сделать, чтобы COM-сервер нормально продолжал работать?


По-моему это делает proxy/stub или служба RPC.
А чем это мешает серверу работать дальше? Не надо уничтожать объект и все, правда так стоит делать, только если сервер создает 1 общий для всех объект. Ну или если очень хочется , можно в IClassFactory::CreateInstance самостоятельно вызвать лишний раз AddRef для своего объекта.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.