如何在Windows Azure上的IIS 7中更改应用程序池的Enable32BitAppOnWin64属性?

3

我有一个涉及第三方库的项目,这个库只适用于32位系统。但是我的项目将在Windows Azure上运行,因此在Windows Azure运行我的应用程序之前,我必须将Application Pool的Enable32BitAppOnWin64属性设置为true。有哪些方法可以设置这个属性(配置、编程)?如果我只能通过编程完成,那么在代码中我必须在哪里更改它?我可以在WebRole的OnStart事件中完成吗?

2个回答

13

我刚刚也需要做这件事情。我使用了一个启动任务来改变这个设置。

我创建了一个批处理文件,并添加了这个命令:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true

然后我将批处理文件添加到 Azure 配置的启动脚本中。它没有任何问题地工作。

有关启动任务的更多信息,请参见:http://msdn.microsoft.com/en-us/library/gg456327.aspx


谢谢!但是当我使用这个命令时,我收到了这个消息: 已应用配置更改到“MACHINE / WEBROOT / APPHOST”下的“system.applicationHost / applicationPools”部分,并在配置提交路径“MACHINE / WEBROOT / APPHOST”处进行了配置,但是我的池的配置没有改变。这个消息是正常的回答吗? - Pavel F
Agafon,这个命令的作用是将新应用程序池的默认设置设置为enable32BitAppOnWin64。它不会影响您当前的应用程序池。这在Azure上起作用,因为此命令在Azure创建appPool之前运行,所以该设置适用。 - BigJoe714
非常感谢!如果有人需要,这里有更多关于applicationPoolDefaults的信息:http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/applicationPoolDefaults - Pavel F
@BigJoe714 这个命令只适用于在 Windows Server 2003 (IIS 6.0) 中设置此属性的默认值吗? - Farzin Zaker

0
在启动批处理文件中添加了上述命令后,调用PowerShell脚本,不知何故脚本会在这个条目处失败,导致我的云服务无法启动。最终我修改了WebRole.cs 文件,使其在Azure云服务(Windows Server 2012 R2)中正常工作,修改如下:
using Microsoft.Web.Administration;
namespace KDC.UserWeb.RoleEntryPoint
{
    {
        public override bool OnStart()
        {
            Enable32BitAppPool();
            return base.OnStart();
        }
        {
            base.Run();
        }

    public static void Enable32BitAppPool();
    {
        ServerManager serverManager = new ServerManager();
        ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;
        foreach (ApplicationPool applicationPool in applicationPoolCollection)
        {
            if( !String.IsNullOrEmpty(applicationPool.Name) && applicationPool.Name[0]  != '.' )
            {
                serverManager.ApplicationPools[applicationPool.Name].Enable32BitAppOnWin64 = true;
                serverManager.CommitChanges();
            }
        }
    }

}

}

注意:
默认情况下,会创建两个以 .NET 开头的应用程序池......将进行筛选,并仅选择专门为云服务创建的应用程序池以启用 32 位。


我认为这段代码缺少一些内容。 - John Zabroski

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