2012-10-04 46 views
2

我正在尝试使用c#和ASP.NET来使用COM +。我一直在关注example,但其中一部分失败。如何获得com +应用程序的所有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(“组件”,applicationInstance.Key)被称为我得到的错误:

System.Reflection.TargetParameterCountException: Error while invoking GetCollection.

我如何可以在应用程序获取当前的组件列表实例?

回答

5

你要问的组件的“应用程序”收集的具体应用:

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/en-us/library/windows/desktop/ms686093(v=vs.85).aspx