MSCRM4.0 - 在64位MSCRM4.0 环境中运行32位程序出现的问题及解决方案

如果您安装的是64位的MSCRM4.0,而此时你需要在在此网站下运行一个32位的程序,可能出现下面的问题:   

Server Error in '/ISV/MailExt' Application.

Could not load file or assembly 'CrmMailExtension' or one of its dependencies. An attempt was made to load a program with an incorrect format.

原因及解决的办法:

这可能是因为我们在创建网站应用程序的时候使用的是CRM的应用程序缓冲池CRMAppPool,而这个App Pool不支持运行32位应用。我们可以新建一个应用程序缓冲池,并在这个Pool的“高级选项”里找到“Enable 32-Bit Applications”选项,将其设置为“true”。

 

重新运行程序,你会得到以下的错误:

HTTP Error 500.0 - Internal Server Error

Calling LoadLibraryEx on ISAPI filter "d:\Program Files\Microsoft Dynamics CRM\Server\bin\DefaultAddonFilter.dll" failed

原因及解决的办法:

这是因为MSCRM4.0定义的一个全局的ISAPI Filter:DefaultAddonFilter.dll这个64位的应用程序作用于你运行的32位的应用。 

我们可以设置它的运行条件只对64位应用程序有效: 

打开C:\windows\System32\inetsrv\config\applicationHost.config文件,找到下面的这句定义并修改为:  

<filter name="CRM.Default.Addon" path="d:\Program Files\Microsoft Dynamics CRM\Server\bin\DefaultAddonFilter.dll" enabled="true" preCondition="bitness64" />

 

再次运行程序,可能仍会发现以下的错误:

Server Error in '/ISV/MailExt' Application.

Value cannot be null.
Parameter name: input

原因及解决的办法:

这是因为CRM中定义了连个Http Module作用的结果,我们可以打开web.config文件,你会找到以下这句定义:

 <httpModules>
   <add name="MapOrg" type="Microsoft.Crm.MapOrgEngine, Microsoft.Crm, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
   <add name="CrmAuthentication" type="Microsoft.Crm.Authentication.AuthenticationEngine, Microsoft.Crm, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </httpModules> 

我们可以在我们的应用中的web.config中加上下面的定义以移除Http Module对此网站的作用,因为我们不需要他们。

<httpModules>
  <clear/>
</httpModules> 

   

感谢Ben的文章:Running other web applications inside Dynamics CRM 4.0 (32 or 64 bit) 对解决此问题提供的帮助。

 

 

Could not load file or assembly 'CrmMailExtension' or one of its dependencies. An attempt was made to load a program with an incorrect format. 

你可能感兴趣的:(解决方案)