描述:
写了一个程序server.exe,其中实现了一个COM对象(起名叫sco吧)。client连接server的时候创建sco这个对象,用sco实现的接口访问server中的数据。
server.exe运行流程如下:
1.初始化
2.注册sco的类厂
3.循环更新数据,直到强制退出
我对COM刚刚开始了解不知道理解的对不对。我觉得当client要创建sco这个对象的时候,会先在com库中查sco的类厂有没有注册,如果已经注册了,就直接调用类厂的CreateInstance函数来创建sco。这样,如果server.exe已经在运行(sco的类厂已经注册了),那么一个新的client的连接请求不会导致再创建一个server.exe进程。从我的实验结果来看,情况确实是这样的。
之后,我把server.exe改成了服务。其实就是在启动服务的时候用createprocess创建一个server.exe的进程。这时问题出现了!虽然服务已经开启(server.exe进程已经存在),当有新的client想要连接server的时候,似乎并没有在com库中查到已注册的 sco的类厂,而是又新建了一个server.exe的进程……这到底是为什么啊?
折腾了好久依旧没有发现原因,希望大虾们帮忙分析一下。
解决方案1:
实现单实例的进程服务。
解决方案2: 应该把server.exe改成service形式的Com Service
而不是启动服务里CreateProcess一个server.exe来