在64位操作系统上运行32位应用程序池中的网站

4

这是我的设置:

开发环境: - Windows Server 2008 64位 - Visual Studio 2008 - 包含3个类库和1个Web应用程序的解决方案

预发布Web服务器: - Windows Server 2008 R2 64位 - 启用32位应用程序的IIS7.5集成应用程序池

在Visual Studio中,我已将我的4个项目全部设置为编译为“任何CPU”,但当我在具有32位应用程序池的Web服务器上运行此Web应用程序时,它会超时并崩溃。当我以64位模式运行应用程序池时,它可以正常工作。生产Web服务器要求我在64位操作系统中运行32位应用程序池,这就是为什么我在预发布Web服务器上进行了这种配置。

(我考虑过在ServerFault上发布,但似乎服务器部分工作正常。出现问题的是我的代码,它似乎不想在32位应用程序池中运行,这就是我在这里发布的原因。)

编辑:事件查看器错误

Faulting application name: w3wp.exe, version: 7.5.7600.16385, time stamp: 0x4a5bcd2b
Faulting module name: KERNELBASE.dll, version: 6.1.7600.16385, time stamp: 0x4a5bdbdf
Exception code: 0xe053534f
Fault offset: 0x0000b727
Faulting process id: 0x%9
Faulting application start time: 0x%10
Faulting application path: %11
Faulting module path: %12
Report Id: %13

你能从EventViewer或通过附加VS获取堆栈跟踪吗? - Simon Buchan
8个回答

4

很遗憾,我认为这里没有人能够找出解决方法。我使用的两个DLL文件来自于下载的ZIP文件,当我查看这些文件的属性时,有一个框说它们是从互联网下载的,我需要“解除锁定”。似乎64位应用程序池没有遵守这一点,但当我降到32位时它就可以了。一旦我“解除锁定”了DLL文件,一切都正常工作。


2

我曾在一个应用程序上遇到相似的错误...... 如果我将程序集构建为x86目标,则可以正常工作。 只有当我将其定位于“任何 CPU”时才会出现问题。


我也见过这种情况发生。通常,当我使用第三方资源时,会出现32位程序集的情况。不确定为什么 - 但在编写针对TFS 2008 API的代码时,这种情况经常发生。我必须明确地将目标设置为x86,否则它会给我带来随机(和奇怪的)故障。 - Joseph Ferris

1

我猜64дҢҚеЏҮд»ӨиүђиҰЊ64дҢҚе’Њ32дҢҚд»Әз ЃпәЊдҢ†32дҢҚеЏҒиѓҢиүђиҰЊ32дҢҚд»Әз ЃгЂ‚

如жһњдҢ жѓіењЁ32дҢҚеђҮз”Ёзљ„и®Ұз®—жњғдёЉиүђиҰЊз”±64дҢҚзә–иҮ‘е™Ёзә–иҮ‘зљ„д»Әз ЃпәЊдҢ йњЂи¦ЃдҢүз”Ё32дҢҚзә–иҮ‘е™Ёзә–иҮ‘дҢ зљ„д»Әз ЃгЂ‚


1
对于每个项目,请尝试以下步骤:
1)右键单击项目并选择“属性”。
2)在左侧选择“生成”选项卡。
3)选择x86作为平台目标。
4)重新构建。

1

我认为这个错误表明您试图将64位dll加载到32位进程中。您的项目可能都设置为“任何CPU”(或x86),但我敢打赌您正在引用64位dll。您是否使用了任何第三方库,其中包括64位dll?

可以通过修改.csproj文件并使用一些msbuild脚本来根据当前机器环境动态切换32位/64位引用。如果您对如何实现此操作感兴趣,请告诉我,我会发布后续内容。


1

你的帖子有点令人困惑。

任何 CPU - X64 可以工作吗?

任何 CPU - X64+32bitCompat 不能工作吗?

如果是这种情况,那么似乎使用的库之间存在差异。也许运行时将其解释为 x64,但输入的是 x86 库。它们必须匹配。

你应该为 x64 和 x86(或只是 x86)创建新的配置,并根据需要部署它们。在我的经验中,使用“任何 CPU”会导致这种糟糕和丑陋的结果。


1
在我的情况下,问题是由于客户端的 bin 文件夹中存在错误版本的第三方 dlls 引起的。
我在计算机上安装了版本 10.3 和 11.1 的 Infragistics。我的项目引用了版本 11.1,但是在客户端的 bin 文件夹中只有 Infragistics 10.3。
因为我在计算机上安装了两个版本,所以在构建应用程序时我没有任何错误。原因是我的电脑可以确定好的 Infragistics 版本在 GAC 中的位置。但是对于没有安装 Infragistics 的客户,我会收到与此帖子中提出的问题相同的错误。

0

相同(通用)异常代码,但对我而言,如果我尝试使用域管理员用户帐户进行身份验证(对于我的32位.net 2应用程序在2k8R2上的IIS 7),则会出现问题。如果我创建一个本地用户并将其添加到Builtin \ Administrators组中,然后使用该帐户登录,则应用程序可以正常工作。即使域管理员用户自动成为builtin \ administrators的成员。希望这种思路不依赖于域管理员帐户的想法能帮助其他人。


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