Как узнать состояние COM+ приложения?
От: gloomy rocker Россия  
Дата: 24.06.03 06:40
Оценка:
Программно нужно узнать, запущено ли COM+ приложение с заданным именем или GUID.
Пытался сделать это через COMAdminCatalog, но мне не удалось получить коллекцию "ApplicationInstances".
При попытке получить эту коллекцию возникает ошибка: "Параметр задан неверно."

Что в этом коде не так? И вообще, может я не тем путем пошел?
#include "stdafx.h"
#import "com\comadmin.dll"

int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);
    try
    {
        COMAdmin::ICOMAdminCatalogPtr pCatalog(__uuidof(COMAdmin::COMAdminCatalog));
        COMAdmin::ICatalogCollectionPtr pApps;
        pApps = pCatalog->GetCollection(L"ApplicationInstances");
    }
    catch(_com_error &e)
    {
        if(e.Description().length()==0)
            MessageBox(NULL,e.ErrorMessage(),"",MB_OK);
        else
            MessageBoxW(NULL,e.Description(),L"",MB_OK);
    }
    return 0;
}


P.S. Все это под Win2k.
Скука — двигатель прогресса.
Re: Как узнать состояние COM+ приложения?
От: EM Великобритания  
Дата: 24.06.03 09:30
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

GR>Программно нужно узнать, запущено ли COM+ приложение с заданным именем или GUID.

GR>Пытался сделать это через COMAdminCatalog, но мне не удалось получить коллекцию "ApplicationInstances".


ИМХО, COMAdminCatalog не поддерживает такую коллоекцию ("ApplicationInstances").
Задача вообще поставлена неверно. COM+ appliocation не может быть "запущен". Может быть инстанцирован один или несколько COM компонентов, инсталлированных в COM+ app. А что такое "запущенное" COM+ app мне, честно говоря, непонятно...
Опыт — это такая вещь, которая появляется сразу после того, как была нужна...
Re[2]: Как узнать состояние COM+ приложения?
От: gloomy rocker Россия  
Дата: 24.06.03 10:10
Оценка:
Здравствуйте, EM, Вы писали:

EM>ИМХО, COMAdminCatalog не поддерживает такую коллоекцию ("ApplicationInstances").

Цитата из MSDN.
The ApplicationInstances collection is a top-level collection that is used to retrieve information regarding running applications.
ms-help://MS.MSDNQTR.2002JUL.1033/cossdk/htm/comadmincollections_7qr2.htm
Если уж про нее пишут в MSDN, то как до этой коллекции достучаться?

EM>Задача вообще поставлена неверно. COM+ appliocation не может быть "запущен".

Под COM+ appliocation имелось в виду серверное приложение.
А запущен — значит имеется просесс dllhost.exe, запущеный следующим образом
dllhost.exe /ProcessID:{GUID серверного приложения}
Это происходит при инстанцировании одного или нескольких COM компонентов, инсталлированных в COM+ app.

EM>Может быть инстанцирован один или несколько COM компонентов, инсталлированных в COM+ app. А что такое "запущенное" COM+ app мне, честно говоря, непонятно...

Кроме того, "запустить COM+ app" можно еще из "Службы комопнентов", при этом ни один из COM компонентов не инстанцируется, а процесс dllhost.exe запускается. Плюс еще такой вариант:

    COMAdmin::ICOMAdminCatalogPtr pCatalog(__uuidof(COMAdmin::COMAdminCatalog));
    pCatalog->StartApplication("{4EA00F3A-20F3-4451-AF27-39E71824FE54}");


Теперь попытаюсь переформулировать вопрос.
Нужно узнать, существует ли процесс dllhost.exe, соответствующий серверному COM+ приложению с заданным именем или GUID.
Скука — двигатель прогресса.
Re[3]: Как узнать состояние COM+ приложения?
От: EM Великобритания  
Дата: 24.06.03 12:53
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

GR>Здравствуйте, EM, Вы писали:


EM>>ИМХО, COMAdminCatalog не поддерживает такую коллоекцию ("ApplicationInstances").

GR>Цитата из MSDN.
GR>The ApplicationInstances collection is a top-level collection that is used to retrieve information regarding running applications.
GR>ms-help://MS.MSDNQTR.2002JUL.1033/cossdk/htm/comadmincollections_7qr2.htm
GR>Если уж про нее пишут в MSDN, то как до этой коллекции достучаться?


Про нее в MSDN еще пишут такую вещь :

Platform SDK Release: February 2003
(см http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cossdk/htm/comadmincollections_7qr2.asp)

У меня на машине Platform SDK годичной давности и коллекции ApplicationInstances там определенно нет. Более того, в шестом MSDN тоже про нее ничего нет... Так что думаю, что эта коллекция вставлена недавно и у тебя Platform SDK старый
Опыт — это такая вещь, которая появляется сразу после того, как была нужна...
Re[4]: Как узнать состояние COM+ приложения?
От: gloomy rocker Россия  
Дата: 24.06.03 13:10
Оценка:
Здравствуйте, EM, Вы писали:

EM>Про нее в MSDN еще пишут такую вещь :

EM>Platform SDK Release: February 2003
EM>(см http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cossdk/htm/comadmincollections_7qr2.asp)
Это я тоже читал.

EM>У меня на машине Platform SDK годичной давности и коллекции ApplicationInstances там определенно нет. Более того, в шестом MSDN тоже про нее ничего нет... Так что думаю, что эта коллекция вставлена недавно и у тебя Platform SDK старый

Я думаю, дело не в версии Platform SDK, а во внутренностях comadmin.dll, которая действительно старая, а новая входит в состав WinXP и COM+ 1.5, но это только догадки.

Меня интересует, как "Служба компонентов" определяет, какие приложения запущены (шары в коробках вращаются).
Скука — двигатель прогресса.
Re[5]: Как узнать состояние COM+ приложения?
От: EM Великобритания  
Дата: 24.06.03 13:14
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

GR>Здравствуйте, EM, Вы писали:


EM>>Про нее в MSDN еще пишут такую вещь :

EM>>Platform SDK Release: February 2003
EM>>(см http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cossdk/htm/comadmincollections_7qr2.asp)
GR>Это я тоже читал.

EM>>У меня на машине Platform SDK годичной давности и коллекции ApplicationInstances там определенно нет. Более того, в шестом MSDN тоже про нее ничего нет... Так что думаю, что эта коллекция вставлена недавно и у тебя Platform SDK старый

GR>Я думаю, дело не в версии Platform SDK, а во внутренностях comadmin.dll, которая действительно старая, а новая входит в состав WinXP и COM+ 1.5, но это только догадки.

Новая dll входит в состав нового SDK. Скачай его и посмотри. Должно заработать.
Опыт — это такая вещь, которая появляется сразу после того, как была нужна...
Re[6]: Как узнать состояние COM+ приложения?
От: Аноним  
Дата: 25.06.03 07:35
Оценка:
Здравствуйте, EM, Вы писали:


EM>>>У меня на машине Platform SDK годичной давности и коллекции ApplicationInstances там определенно нет. Более того, в шестом MSDN тоже про нее ничего нет... Так что думаю, что эта коллекция вставлена недавно и у тебя Platform SDK старый

GR>>Я думаю, дело не в версии Platform SDK, а во внутренностях comadmin.dll, которая действительно старая, а новая входит в состав WinXP и COM+ 1.5, но это только догадки.

EM>Новая dll входит в состав нового SDK. Скачай его и посмотри. Должно заработать.


Вряд ли.
На COM+ 1.0 (Win2K) придется либо на события подписываться (IComAppEvents), либо посмотреть, что умеет по этому поводу WMI — возможно, оттуда эту информацию можно достать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.