我们有一个大型的C#(.net 2.0)应用程序,它使用我们自己的C++ COM组件和第三方指纹扫描程序库,也可以通过COM访问.我们遇到了一个问题,在生产过程中,指纹库中的某些事件不会被C#应用程序触发,尽管来自我们自己的C++ COM组件的事件被触发并且收到的很好.
使用MSINFO32将工作系统上加载的模块与发生故障的系统上的模块进行比较,我们确定这是由STDOLE.DLL不在GAC中引起的,因此未加载到故障进程中.
将此文件拖到GAC中会导致事件从指纹COM库恢复正常.
那么stdole.dll做什么?它的大小是16k所以它不能太多......它是否与STDOLE32这样的另一个库有某种联系?它的缺席怎么会导致这种奇怪的行为?
我们如何分发stdole.dll?这是一个XCOPY部署应用程序,我们不使用GAC.我们应该将它打包为资源并使用System.EnterpriseServices.Internal.Publish.GacInstall来确保它在GAC中吗?
似乎stdole.dll是主要的互操作程序集.请参阅MSDN上的Office 2003主互操作程序集.