![在 64 位进程中运行 32 位 DLL 或反之亦然的解决方案](https://linux22.com/image/505863/%E5%9C%A8%2064%20%E4%BD%8D%E8%BF%9B%E7%A8%8B%E4%B8%AD%E8%BF%90%E8%A1%8C%2032%20%E4%BD%8D%20DLL%20%E6%88%96%E5%8F%8D%E4%B9%8B%E4%BA%A6%E7%84%B6%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.png)
我运行的是 Windows Vista Business 64 位版。我有一个使用 C# 在 .NET 中编写的 Web 服务。我在网页上还有一个与 Web 服务通信的客户端脚本。这是一个名为“Default.aspx”的 aspx 页面。我设置了 IIS,并将包含 Web 服务以及运行它所需的所有文件(包括 default.aspx 页面)的 Web 服务文件夹移动到 C:\inetpub\wwwroot。我打开了 IIS 管理器并正确配置了所有内容。现在我收到一条错误消息:
尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)
有人告诉我,这可能是我的许可证密钥有问题,应用程序配置为不同的格式,或者某个地方有损坏的文件。我的许可证密钥没问题,我不认为有损坏的文件。我认为问题是我试图将 32 位 DLL 加载到 64 位进程中或反之亦然。详细的错误消息如下。如果有人能给我一个详细的解决方案,因为我已经给出了详细的描述,我将不胜感激。我整天都在为此而苦恼,我很沮丧。请帮帮我。
异常详细信息:System.BadImageFormatException:尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。
堆栈跟踪:
[BadImageFormatException:尝试加载格式不正确的程序。 (来自 HRESULT 的异常:0x8007000B)] Luxand.FSDK.ActivateLibrary(String LicenseKey)+0 FaceRecognition._Default.Page_Load(Object sender,EventArgs e)位于 D:\Project Details\Layne Projects\DotNet Project\FaceRecognition\FaceRecognition\Default.aspx.cs:60 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+25 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e)+42 System.Web.UI.Control.OnLoad(EventArgs e)+132 System.Web.UI.Control.LoadRecursive() +66 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean包括StagesAfterAsyncPoint)+2428
答案1
在 IIS 7 中,您可以将应用程序池配置为在 32 位模式下运行;当您必须访问仅适用于 32 位系统的 DLL 时,这非常有用。
您可以修改默认应用程序池的属性以使整个 Web 服务器以 x86 模式运行,或者您可以创建一个新的应用程序池,将其配置为 32 位并为其分配特定的网站和/或虚拟目录。