我有一个.NET应用程序,它将自己注册为本地COM服务器(通过LocalServer32注册表项)。
我也在.NET中为这个应用程序编写测试客户端,但我注意到一些非常奇怪的东西。我的COM服务器实际上正在加载过程中,这不是我想要的。
测试客户端没有引用服务器的实现,因此Windows必须查看我的注册表,查看LocalServer32中的可执行文件路径,确定它是.NET程序集并在我的应用程序中加载它? !?
我可以强制我的应用程序用完这样的过程:
Type type = Type.GetTypeFromCLSID(myGuid, "localhost");
var foo = Activator.CreateInstance(type);
然而,对我而言,这一切似乎都非常不合逻辑。 COM组件仅 注册为服务器; CLSID下没有InProcServer32注册表项。
有没有办法防止Windows“智能”,所以客户端不需要特殊处理?
答案 0 :(得分:0)
要让它作为COM服务器运行,您需要在程序集上设置ApplicationActivation属性。
在AssemblyInfo.cs文件中,添加适当的using语句:
using System.EnterpriseServices;
添加装配属性:
[assembly: ApplicationActivation(ActivationOption.Server)]