如何获取一个COM+应用程序的所有COM+组件列表?

4

我正在尝试使用C#和ASP.NET处理COM+。 我一直在按照示例进行操作,但其中的一部分失败了。

dynamic oCatalog = Activator.CreateInstance(Type.GetTypeFromProgID("ComAdmin.COMAdminCatalog"));
/* Get the Applications collection and populate it */
dynamic applicationInstances = oCatalog.GetCollection("Applications");
applicationInstances.Populate();
foreach (dynamic applicationInstance in applicationInstances)
    {
        Response.Write("<p>" + applicationInstance.Name.ToString() + "-" + applicationInstance.Key.ToString() + "</p>");
        dynamic objComponents = oCatalog.GetCollection("Components", applicationInstance.Key);
        objComponents.Populate();
        foreach(dynamic Components in objComponents)
        {
            Response.Write("<p>" + Components.Name.ToString() + "</p>");
        }           
    }

当调用 oCatalog.GetCollection("Components", applicationInstance.Key) 时,我收到以下错误提示:
System.Reflection.TargetParameterCountException:调用GetCollection时出错。
如何获取应用程序实例中当前组件的列表?
1个回答

8
您需要向“应用程序”集合请求特定应用程序的组件:
ICOMAdminCatalog2 oCatalog = (ICOMAdminCatalog2) Activator.CreateInstance(Type.GetTypeFromProgID("ComAdmin.COMAdminCatalog"));

ICatalogCollection applications = oCatalog.GetCollection("Applications");
applications.Populate();
foreach (ICatalogObject applicationInstance in applications)
{
    ICatalogCollection comps = applications.GetCollection("Components", applicationInstance.Key);
    comps.Populate();
    foreach (ICatalogObject comp in comps)
    {
        Console.WriteLine("{0} - {1}", comp.Name, comp.Key);
    }
}

例如,请在此处检查:http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms686093(v=vs.85).aspx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接