带有 COM 库的 IIS 和 IISExpress
IIS and IISExpress with COM libraries
我的 Web 应用程序使用 COM 库,我使用此代码:
Type headType = Type.GetTypeFromProgID("Eapi.Head");
dynamic head = null;
head = Activator.CreateInstance(headType);
我对 IIS 的理解有一些问题。当我在 VisualStudio 中调试我的 webapp 时,运行 IISExpress 和所有工作。但是在 IIS 上发布项目后,应用程序找不到 COM 库。
HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)
IIS 在我开发项目的同一台计算机上。
我以两种方式注册这个 dll:
C:\WINDOWS\system32>regsvr32.exe c:\EOS\Delo\API\Eapi.dll
C:\WINDOWS\system32>cd ..
C:\Windows>cd SysWOW64
C:\Windows\SysWOW64>regsvr32.exe c:\EOS\Delo\API\Eapi.dll
C:\Windows\SysWOW64>
当谈到 0x80040154
REGDB_E_CLASSNOTREG
并且您确定您注册了 COM 服务器时,可能的问题是 32/64 位数不匹配。
无论您使用哪个 regsvr32,it would register in-process COM server with the bitness of the DLL。
IIS 应用程序池有自己的位数设置,当两者不匹配时,您的进程内 COM 服务器将变得不可用。
典型的解决方案是为其他位数构建DLL并分别注册,或者更改IIS应用程序池位数以达到匹配,see instructions here:
我的 Web 应用程序使用 COM 库,我使用此代码:
Type headType = Type.GetTypeFromProgID("Eapi.Head");
dynamic head = null;
head = Activator.CreateInstance(headType);
我对 IIS 的理解有一些问题。当我在 VisualStudio 中调试我的 webapp 时,运行 IISExpress 和所有工作。但是在 IIS 上发布项目后,应用程序找不到 COM 库。
HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)
IIS 在我开发项目的同一台计算机上。
我以两种方式注册这个 dll:
C:\WINDOWS\system32>regsvr32.exe c:\EOS\Delo\API\Eapi.dll
C:\WINDOWS\system32>cd ..
C:\Windows>cd SysWOW64
C:\Windows\SysWOW64>regsvr32.exe c:\EOS\Delo\API\Eapi.dll
C:\Windows\SysWOW64>
当谈到 0x80040154
REGDB_E_CLASSNOTREG
并且您确定您注册了 COM 服务器时,可能的问题是 32/64 位数不匹配。
无论您使用哪个 regsvr32,it would register in-process COM server with the bitness of the DLL。
IIS 应用程序池有自己的位数设置,当两者不匹配时,您的进程内 COM 服务器将变得不可用。
典型的解决方案是为其他位数构建DLL并分别注册,或者更改IIS应用程序池位数以达到匹配,see instructions here: