gpt4 book ai didi

c# - 指定从 proc COM 对象实例化时要使用的单元状态

转载 作者:太空狗 更新时间:2023-10-29 23:34:21 26 4
gpt4 key购买 nike

我在 .NET 中创建了一个 COM 对象,并使用 regsvcs 将其注册为 Pooling = 1 的 COM+ 服务器应用程序。 .我目前正在寻找一个错误,因此需要确保此 COM 对象在 STA 中运行,而不是在 MTA 中运行。我该如何指定?
以下任何一项都会对我有所帮助:

  • 组件服务管理单元中的设置
  • 使 COM 对象只允许 STA 而不允许两者的设置/代码片段
  • 调用方 C# 中的设置/代码片段告诉 COM+ COM 对象应该用 STA 初始化

更新:
我试图手动更改 ThreadingModel注册表中的条目来自 BothApartment .这也没有帮助,因为当我尝试实例化 COM 对象时,我得到一个 COMException (0x80110802) 并且事件查看器说:

The threading model of the component specified in the registry is inconsistent with the registration database. The faulty component is: <MyComponent>

是否还有其他地方需要更改线程模型?例如在那个“注册数据库”中?我在哪里可以找到它?

谢谢!

最佳答案

好的,我在公开为 COM 对象的类中插入了以下代码,它似乎可以工作:

[ComRegisterFunction]
private static void Register(Type registerType)
{
if (registerType != null)
{
using (RegistryKey clsidKey = Registry.ClassesRoot.OpenSubKey("CLSID"))
{
using (RegistryKey guidKey = clsidKey.OpenSubKey(registerType.GUID.ToString("B"), true))
{
using (RegistryKey inproc = guidKey.OpenSubKey("InprocServer32", true))
{
inproc.SetValue("ThreadingModel", "Apartment", RegistryValueKind.String);
}
}
}
}
}

我完全不明白,为什么手动更改 ThreadingModel 不会产生相同的结果,但我不在乎...

关于c# - 指定从 proc COM 对象实例化时要使用的单元状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5726624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com