1

我正在尝试在 Server 2008 和 IIS 7 上部署 32 位 ASP Web 应用程序。

我有另一台服务器,应用程序运行良好,但在这台服务器上,每次加载调用我的 DLL 的 ASP 页面时,我都会收到 Error 429: ActiveX component can't create object in DLL

我已经尝试了我在网上找到的针对此问题的所有修复程序,包括以下内容: 在应用程序池上启用 32 位应用程序。从 C:\Windows\SysWOW64 文件夹重新注册 DLL(使用 RegSvr32)

当我运行 SysInternals Process Monitor 并比较结果时,我注意到的主要事情是在正常运行的机器上,当我加载页面时,dllhost.exe 进程和 w3wp.exe 进程之间的活动均匀混合。

在失败的服务器中,我看到在成功的服务器中没有调用注册表,包括一些我不知道它们是什么的调用:HKLM\SOFTWARE\Wow6432Node\Microsoft\VBA\Monitors HKCR\ Wow6432Node\Interface{6F255EB7-E73A-4579-B0EC-045FBC00992D}\InterfaceHelperDisableTypeLib HKCR\Wow6432Node\Interface{6F255EB7-E73A-4579-B0EC-045FBC00992D}\InterfaceHelperDisableAll HKCR\Wow6432Node\Interface{6F255EB7-E73A-4579-B0EC-045FBC00992D} \InterfaceHelperUser

所有这些调用都是使用 dllhost.exe 进程进行的。在出现错误页面之前,w3wp.exe 进程不会再次出现。

我应该提一下,这是两台全新的服务器。我们无法识别它们之间的配置差异。

另外值得一提的是,即使我希望支持这个应用程序,我也无法访问源代码,也无法在任何带有断点或类似的调试模式下执行源代码。

我强烈怀疑我们尝试在 64 位服务器上运行此 32 位代码的方式存在某种配置错误,但我不知道如何证明它,或者引导如何修复它。

谢谢,比尔

更新:问题原来是需要重新生成的 .tlb 文件。我公司中少数从事 C# 开发并被允许查看源代码的人中的一些人很快发现,运行该应用程序的 DLL 中有一个可用的方法来执行此操作。他们编写了一个 VB 脚本,调用它来生成文件,一切都重新启动并运行。

我对 Windows 开发知之甚少,不知道 .tlb 是什么或为什么会起作用,但故事的寓意是,如果您有一个无法在 64 位(可能是任何服务器?)Windows 服务器上运行的 32 位 Web 应用程序由于错误 429,请仔细查看您的 .tlb 文件。只是不要问我你应该寻找什么。

4

1 回答 1

1

您是否确定已启用 IIS 以运行 32 位应用程序?

在您的应用程序池上,右键单击并选择“高级设置”

然后在 General 下确保“Enable 32-bit Applications is”True

通常,默认情况下将其设置为“False”。

这也对我有用 http://support.microsoft.com/kb/177394

在此处输入图像描述

于 2013-05-10T20:57:21.620 回答