【发布时间】:2010-07-13 19:42:54
【问题描述】:
我有一个使用 32 位 dll 的 ASP.NET “网站”。当我 XCOPY 到我们的 64 位服务器时,使用此 32 位 dll 的页面会引发异常。我已经为站点运行的应用程序池将“启用 32 位应用程序”设置为 True,但这无济于事。
我也在尝试将目标平台设置为 x86,但与 Web 应用程序不同,网站没有它的选项。
这是堆栈跟踪 -
Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 7/13/2010 5:01:12 PM
Event time (UTC): 7/13/2010 9:01:12 PM
Event ID: 9611671ef6b845f39af6b26b89af85e3
Event sequence: 51
Event occurrence: 4
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/2/ROOT-1-129235271319338750
Trust level: Full
Application Virtual Path: /
Application Path: C:\Site\
Machine name: WWWTEST
Process information:
Process ID: 4020
Process name: w3wp.exe
Account name: IIS APPPOOL\WWWTEST AppPool
Exception information:
Exception type: COMException
Exception message: Retrieving the COM class factory for component with CLSID {58968145-CF05-4341-995F-2EE093F6ABA3} failed due to the following error: 80040154.
Request information:
Request URL: http://site/Downloads.aspx
Request path: /Downloads.aspx
User host address: 192.168.1.101
User:
Is authenticated: False
Authentication Type:
Thread account name: WWWTEST\Webtest
Thread information:
Thread ID: 4
Thread account name: WWWTEST\Webtest
Is impersonating: False
Stack trace: at Downloads.Button_Click(Object Sender, DataGridCommandEventArgs E) in C:\Site\Downloads.aspx.vb:line 1034
at System.Web.UI.WebControls.DataGrid.OnItemCommand(DataGridCommandEventArgs e)
at System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e)
at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
at System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e)
at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
at System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e)
at System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument)
at System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
我在线搜索了异常“检索 COM 类工厂以获取具有 CLSID {58968145-CF05-4341-995F-2EE093F6ABA3} 的组件失败,原因是以下错误:80040154。”并在 IIS7 上启用了 32 位模式,但仍然没有成功。
非常感谢任何帮助。
** 回答 ** 在用户 Kev 的帮助下,我能够解决这个问题。这就是我所做的 -
- 从here 下载 Microsoft 开发人员支持 OLE 文件属性读取器 2.1 示例 (KB 224351)
- 使用 WinZip/7-zip 等将内容解压缩到临时文件夹。不要运行安装程序。将文件“Interop.DSOFile.dll”和“dsofile.dll”从提取的位置复制到服务器上应用程序的 bin 目录。
- 使用管理员权限打开 cmd 提示符并导航到服务器上的 bin 目录
- 输入“regsvr32 dsofile.dll”
- 确保应用程序池设置为启用 32 位应用程序。
- 重启 IIS
非常感谢,凯夫。我真的很感激。
【问题讨论】:
-
抛出了什么异常?你能粘贴堆栈跟踪吗?
-
Kev,我已经用堆栈跟踪更新了这个问题。有什么想法吗?
-
这是第三方组件吗?如果是这样,那是什么。我猜有一个互操作程序集?
-
是的,它是一个互操作程序集。它使用 32 位框架,并且 dll 包含一个 32 位 COM 对象。 blogs.msdn.com/b/karthick/archive/2006/02/28/540780.aspx
-
@tempid - 这是一个自制的 COM 组件吗?谁是供应商?
标签: iis-7