正在执行的.NET本地COM服务器

时间:2011-10-14 08:32:18

标签: .net com com-interop

我有一个.NET应用程序,它将自己注册为本地COM服务器(通过LocalServer32注册表项)。

我也在.NET中为这个应用程序编写测试客户端,但我注意到一些非常奇怪的东西。我的COM服务器实际上正在加载过程中,这不是我想要的。

测试客户端没有引用服务器的实现,因此Windows必须查看我的注册表,查看LocalServer32中的可执行文件路径,确定它是.NET程序集并在我的应用程序中加载它? !?

我可以强制我的应用程序用完这样的过程:

Type type = Type.GetTypeFromCLSID(myGuid, "localhost");
var foo = Activator.CreateInstance(type);

然而,对我而言,这一切似乎都非常不合逻辑。 COM组件仅 注册为服务器; CLSID下没有InProcServer32注册表项。

有没有办法防止Windows“智能”,所以客户端不需要特殊处理?

1 个答案:

答案 0 :(得分:0)

要让它作为COM服务器运行,您需要在程序集上设置ApplicationActivation属性。

  1. 添加对System.EnterpriseServices的引用。
  2. 在AssemblyInfo.cs文件中,添加适当的using语句:

    using System.EnterpriseServices; 
    
  3. 添加装配属性:

    [assembly: ApplicationActivation(ActivationOption.Server)]