Я пытаюсь программно установить конструктор компонента COM+ из приложения C#. Я нашел в Интернете следующий пример кода, но он выдает исключение:
COMAdminCatalogCollection Components;
COMAdminCatalogClass Catalog = new COMAdminCatalogClass();
string strConstr;
string ApplicationName = "ApplicationName"; // case sensitive
string CompName = "MyComponent.ProgID";
COMAdminCatalogCollectionClass Applications = (COMAdminCatalogCollectionClass)Catalog.GetCollection("Applications");
Applications.Populate();
// find the correct application
foreach (COMAdminCatalogObjectClass AppObject in Applications)
{
if (AppObject.Name == ApplicationName)
{
// find matching component
Components = (COMAdminCatalogCollectionClass)(Applications.GetCollection("Components", AppObject.Key));
Components.Populate();
foreach (COMAdminCatalogObjectClass CompObject in Components)
{
if (CompObject.Name.ToString() == CompName)
{
CompObject.get_Value("ConstructorString").ToString();
CompObject.get_Value("ConstructionEnabled").ToString();
}
}
}
}
Когда я запускаю этот код, я получаю следующее исключение в строке 6:
Не удалось преобразовать COM-объект типа «System.__ComObject» в класс типа «COMAdmin.COMAdminCatalogCollectionClass». Компоненты COM, которые входят в среду CLR и не поддерживают IProvideClassInfo или не имеют зарегистрированных сборок взаимодействия, будут заключены в тип __ComObject. Экземпляры этого типа нельзя привести ни к какому другому классу; однако их можно приводить к интерфейсам, если базовый компонент COM поддерживает вызовы QueryInterface для IID интерфейса.
Есть идеи, где я ошибаюсь? Или есть более простой способ сделать это?