Как перезапустить приложение COM + на удаленном сервере из .NET? - PullRequest
3 голосов
/ 05 июня 2009

Как программно перезапустить приложение COM +, запущенное на удаленном сервере, из кода в .NET?

1 Ответ

7 голосов
/ 05 июня 2009

Вы должны использовать ComAdmin API через COM-взаимодействие.

Поместите ссылку на Windows \ System32 \ Com \ ComAdmin.dll, затем:

COMAdmin.COMAdminCatalog catalog = new COMAdmin.COMAdminCatalogClass();
catalog.Connect(servername);
catalog.ShutdownApplication(AppNameOrAppID);

Справочник ComAdmin можно найти в MSDN здесь .

Это COM API, и немного странный. Например. Вы не можете создать экземпляр COMAdminCatalog, потому что это интерфейс, а не класс, поэтому вы должны использовать COMAdminCatalogClass для создания нового экземпляра. Используйте Обозреватель объектов Visual Studio, чтобы осмотреть пространство имен COMAdmin и найти подобные подводные камни.

РЕДАКТИРОВАТЬ (некоторые примечания):

На самом деле, вы можете написать

COMAdmin.COMAdminCatalog catalog = new COMAdmin.COMAdminCatalog();

и это работает, что удивительно, потому что COMAdminCatalog - это интерфейс. Но это должно быть уловка VStudio или компилятора C #, потому что результирующая сборка содержит следующий IL:

newobj instance void [Interop.COMAdmin]COMAdmin.COMAdminCatalogClass::.ctor()

Так что каким-то образом выяснилось, что должен быть создан экземпляр класса COMAdminCatalogClass, что достаточно странно и немного запутанно. Если кто-то знает, как это происходит, прокомментируйте.

...