当InProcServer32键定义DLL的完整路径时,path环境变量中为什么需要COM DLL的路径

Why is the path to a COM DLL needed in the PATH Environment variable when InProcServer32 key defines the full path to the DLL?

本文关键字:DLL 路径 环境变量 为什么 COM path InProcServer32 定义      更新时间:2023-10-16

我正在开发一个在C#web服务中使用的遗留C++组件。C#项目引用显示为有效,但在运行时,当创建COM对象时,会引发"CLSID查找失败"异常。事实证明,CLSID解析需要DLL所在的根路径。

为什么要使CLSID查找工作,DLL的路径必须存在于path环境变量中?

我找到了原因。C#Web服务托管在IIS中,当调度传入调用时,IIS会探测Web服务的"\bin"文件夹中的DLL。由于COM组件是项目引用,因此磁盘上的物理文件是运行时可调用包装器,而不是实际的DLL。将DLL的路径添加到path环境变量使IIS能够找到COM DLL并成功解析它。