这个问题快把我逼疯了。我有一个 WCF 服务,它使用 COM .dll(位于 SysWOW64 中)来执行一些操作。我在Windows 2008 R2上注册了它,但是当该服务部署在服务器上时它不起作用。我的服务是针对“任何 cpu”编译的。
当我创建控制台应用程序时,它工作正常。我究竟做错了什么?是权限问题吗?我将应用程序池用户更改为管理员,但也不起作用。当我尝试将池更改为 32 位应用程序时,池崩溃或服务超时。
错误信息是:
System.Runtime.InteropServices.COMException:由于以下错误,检索 CLSID 为 {47E736CA-3EEA-11D5-8400-00A0C9CA15AD} 的组件的 COM 类工厂失败:80040154 类未注册(HRESULT 异常: 0x80040154(REGDB_E_CLASSNOTREG))。
有人能指出我正确的方向吗?
最佳答案
那是因为你的 COM DLL 是 32 位的。 SysWOW64 适用于 64 位 Windows 上的 32 位组件。您的控制台应用程序可以运行,因为它是作为 x86 构建的(检查项目属性),但 IIS 应用程序池是 64 位。
您需要在 IIS 中创建一个新的应用程序池,转到高级属性
并将启用 32 位应用程序
设置为 True。这将为您创建一个 32 位应用程序池,并且您的 COM dll 将被找到。
关于wcf - 向 IIS7.5 注册 COM .dll (REGDB_E_CLASSNOTREG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7051529/