我有第三方库的项目,这个库是为32位系统制作的。但我的项目将在Windows Azure上运行,我必须在Windows Azure运行我的应用程序之前将应用程序池的属性Enable32BitAppOnWin64设置为true。有什么方法可以设置此属性(以编程方式配置)?如果我只能以编程方式执行此操作,那么我必须在代码中更改它吗?我可以在WebRole的OnStart事件中这样做吗?
答案 0 :(得分:12)
我必须这样做。我使用启动任务来更改此设置。
我创建了一个批处理文件并添加了以下命令:
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true
然后我添加了批处理文件作为azure配置的启动脚本运行。它没有任何问题。
有关启动任务的详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/gg456327.aspx
答案 1 :(得分: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();
}
}
}
}
}
注意:
默认情况下,有两个appPool用.NET创建的启动...
将被过滤,并且仅选择为云服务创建的appPool以启用32位。
的