如何在32位模式下运行VS 2010本地IIS

3
我在我的ASP.NET MVC 3项目中引用了一些32位和64位的DLL。虽然这些项目能够编译通过,但我会遇到运行时错误。这是因为我以64位的方式运行Web项目。如何在本地IIS中“启用32位”呢(就像在IIS 7.5 Pro中一样)?我使用的是.NET 4.0。我遇到的错误是:“检索具有CLSID {A6775dfd2-1dfF-421C-A187-4D55F4DDFBFF}的组件的COM类工厂失败,原因是以下错误:80040154 类未注册 (来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。”

看看这个能否帮到你:http://serverfault.com/questions/98257/need-to-run-an-iis-website-in-32bit-mode-on-a-64bit-windows-server - Ricardo Souza
没有帮助。请问还有其他建议吗? - InfoLearner
出了什么错误?这绝对是由于64位IIS而不是其他原因引起的吗? - Snixtor
检索组件的COM类工厂失败,原因是以下错误:80040154类未注册。 - InfoLearner
3个回答

4
如果您不需要64位组件(不确定正在运行什么或是否可以将其排除在外,因为您只是想知道如何以32位模式运行),请参考以下内容。

http://learn.iis.net/page.aspx/201/32-bit-mode-worker-processes/

你可以通过以下方式在服务器级别上设置它: %windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true 或者设置您特定的应用程序池(我个人更推荐),您可以尝试以下操作。很抱歉,此页面似乎已不再活动,现在只有谷歌缓存显示它:
强制IIS创建32位应用程序池工作进程 如果您的应用程序作为Web应用程序运行,也就是说它正在运行在IIS应用程序池工作进程中,您将希望该工作进程(w3wp.exe)成为32位进程。这可以在应用程序池的高级设置中指定: 选择您的Web应用程序的应用程序池。单击右侧的编辑应用程序池下的高级设置....更改“(常规)”下的启用32位应用程序的值为True。 请注意,设置中的“启用”一词并不意味着“允许”,如“允许32位或64位应用程序”。它实际上意味着“强制”,例如“强制工作进程以32位模式运行,以支持32位应用程序。”这意味着当此设置具有True值时,应用程序池工作进程将始终作为32位进程启动。将其设置为False将启动64位应用程序池工作进程。 请注意,当启动应用程序池工作进程时,它会显示在任务管理器中的进程选项卡中的图像名称列中,其名称为w3wp.exe。当启用32位应用程序设置具有True值时,它将被列为w3wp.exe * 32。

2
"IIS Express 7.5(如果您安装它,则由Visual Studio 2010使用)仅支持32位:"

http://learn.iis.net/page.aspx/1265/iis-75-express-readme/

引用:
“支持32位和64位系统,但是只有32位的IIS 7.5 Express版本。”
所以我无法想象您的问题与通常可能出现的32位/64位池模式问题有关,如果您所有的DLL都是32位的话。
但是,如果您尝试加载一个64位的COM DLL,则会失败;64位二进制文件无法加载到32位进程中,反之亦然。
另一个需要注意的地方是,在选择要使用哪个Web服务器进行调试时,忘记勾选“使用IIS Express”复选框

enter image description here

如果您不勾选该复选框,则将在Windows附带的IIS7版本中的DefaultWebSite的子应用程序中运行您的站点。

DefaultWebSiteDefaultAppPool中运行,在64位版本的Windows中作为64位进程运行。因此,如果要使用它并使用32位二进制文件,则需要将DefaultAppPool更改为以32位运行。

您需要使用IIS7的MMC插件或通过从命令行运行appcmd.exe工具来完成此操作。

你有什么建议?它在x86的Windows应用程序中运行正常,但在x64的ASP.NET中却不能工作。 - InfoLearner
你需要告诉我们更多关于这些COM DLL的信息,包括它们是如何构建的等等。请将这些内容添加到问题中。 - Kev
我想我已经提到了它是一个COM DLL,并且我使用regsvr32.exe进行注册。它在Windows控制台应用程序中运行良好。我将其作为ASP.NET类型引用到Web项目中,但是失败了。尝试引用任何COM DLL,注册它,你会遇到同样的问题。 - InfoLearner
但是您没有告诉我们它是使用托管代码(C#,VB.NET等)编写的COM组件还是非托管代码(VB6,C ++等)。有许多构建COM组件的方法。这个组件是32位还是64位? - Kev
你说过:“我已经引用了一些32位和一些64位的DLL”,那么你是在说你有一个32位和一个64位的DLL吗?正如我的回答所述,你不能混合使用32位和64位的二进制文件和进程。 - Kev
显示剩余4条评论

0

将编译目标设置为x86,而不是AnyCPU或x64。这样你的dll将始终以32位运行,而无需更改IIS服务器设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接