在64位IIS下,网站使用32位COM组件导致“800a01ad” ActiveX component can't create object错误的问题
总是要面对一些老ASP系统升级到ASP.NET的问题,由于各种原因,目前需要将ASP 和ASP.NET 整合到一个项目里使用。由于开发机是64位Windows 7,自然配备了64位IIS,将原来老系统的COM组件注册之后,在IIS上运行ASP代码的时候,在创建COM组件对象处,产生如下错误:
Microsoft VBScript runtime error '800a01ad'
ActiveX component can't create object
经过一番摸索之后,利用强大的Process Monitor 工具,监控w3wp.exe的操作,发现它试图在类似HKCR\CLSID\路径下寻找COM组件信息,但是因为COM是32位的,所以其被注册到HKEY_CLASSES_ROOT\Wow6432Node\CLSID\这样的位置,而在寻找时,应该寻找HKCR\Wow6432Node\CLSID\这个位置才会找到。
那么怎么让IIS找到正确的COM信息位置呢?办法就是让IIS可以工作在32位模式下,具体方法是,找到网站所使用的App pool,然后选择“Advanced Settings”,然后设置“Enable 32-Bit Applications”为true就好了。设置后,再监控w3wp,发现现在已经在HKCR\Wow6432Node\CLSID下面寻找COM注册信息了,因此问题得以解决。
理解的越多,需要记忆的就越少