【发布时间】:2008-11-19 16:16:17
【问题描述】:
我正在尝试从 C# 应用程序以编程方式设置 COM+ 组件的构造函数字符串。我在网上找到了下面的示例代码,但是它抛出了一个异常:
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 行得到以下异常:
无法将类型为“System.__ComObject”的 COM 对象转换为类类型“COMAdmin.COMAdminCatalogCollectionClass”。进入 CLR 且不支持 IProvideClassInfo 或未注册任何互操作程序集的 COM 组件将包装在 __ComObject 类型中。这种类型的实例不能转换为任何其他类;但是,只要底层 COM 组件支持对接口的 IID 的 QueryInterface 调用,它们就可以转换为接口。
知道我哪里出错了吗?或者有更简单的方法吗?
【问题讨论】:
-
你到底想在这里实现什么?
-
我想为 COM+ 组件设置构造函数字符串。我意识到这段代码实际上并不会设置它,但我想先尝试显示字符串,我什至还做不到。