我想更改Enable32BitAppOnWin64使用C#的属性。我知道与IIS 6和IIS 7交互的方式是不同的。但我需要两种版本的解决方案。如何在IIS 6和IIS 7中使用c启用32位应用程序模式#
回答
有编程的方式管理几个不同的IIS 6和IIS 7
IIS 6使用DirectoryEntry
类和元数据库数据库API编程管理。
IIS 7使用Microsoft.Web.Administration
程序集 和ServerManager
类进行管理。
此外,IIS 6不能同时运行64位和32位工作进程 (请参阅MSDN BLOG)。 因此,对于IIS 6,将Enable32BitAppOnWin64
设置为true
意味着所有worker 进程(所有应用程序池)都作为32位进程运行。
IIS 7能够同时运行64位和32位工作进程。 这意味着您为特定应用程序池 设置了Enable32BitAppOnWin64
,而不是针对所有应用程序池。
您还必须检测IIS的版本才能使用正确的API。 这可以通过从注册表 阅读下面的DWORD值(有关详细信息,请参阅Learn IIS)来完成:
HKLM\Software\Microsoft\InetStp\MajorVersion and
HKLM\Software\Microsoft\InetStp\MinorVersion
所以,这里是一些代码来设置Enable32BitAppOnWin64
对于IIS 6和IIS 7 (请注意,你必须引用Microsoft.Web.Administration
和System.DirectoryServices
组件在Visual Studio项目):
private static Version GetIISVerion()
{
using (RegistryKey inetStpKey =
Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\InetStp"))
{
int majorVersion = (int)inetStpKey.GetValue("MajorVersion");
int minorVersion = (int)inetStpKey.GetValue("MinorVersion");
return new Version(majorVersion, minorVersion);
}
}
private static void Enable32BitAppOnWin64IIS7(string appPoolName)
{
Console.Out.WriteLine("Setting Enable32BitAppOnWin64 for {0} (IIS7)", appPoolName);
using (ServerManager serverMgr = new ServerManager())
{
ApplicationPool appPool = serverMgr.ApplicationPools[appPoolName];
if (appPool == null)
{
throw new ApplicationException(String.Format("The pool {0} does not exist", appPoolName));
}
appPool.Enable32BitAppOnWin64 = true;
serverMgr.CommitChanges();
}
}
private static void Enable32BitAppOnWin64IIS6(string serverName)
{
Console.Out.WriteLine("Setting Enable32BitAppOnWin64 for IIS6");
using (DirectoryEntry appPools =
new DirectoryEntry(String.Format("IIS://{0}/W3SVC/AppPools", serverName)))
{
appPools.Properties["Enable32BitAppOnWin64"].Value = true;
appPools.CommitChanges();
}
}
public static void Enable32BitAppOnWin64(string serverName, string appPoolName)
{
Version v = GetIISVerion(); // Get installed version of IIS
Console.Out.WriteLine("IIS-Version: {0}", v);
if (v.Major == 6) // Handle IIS 6
{
Enable32BitAppOnWin64IIS6(serverName);
return;
}
if (v.Major == 7) // Handle IIS 7
{
Enable32BitAppOnWin64IIS7(appPoolName);
return;
}
throw new ApplicationException(String.Format("Unknown IIS version: {0}", v.ToString()));
}
static void Main(string[] args)
{
Enable32BitAppOnWin64(Environment.MachineName, "DefaultAppPool");
}
我还要提到的是有使用配置数据库API的可能性 也适用于IIS 7。在Windows Server 2008操作系统上,您可以通过 安装名为“IIS 6管理兼容性”的角色服务。这 角色服务使您可以使用“旧” IIS 6 API来管理IIS 7
如果“IIS 6管理兼容性”是一个选项,你改变了 功能Enable32BitAppOnWin64IIS7
如下:
private static void Enable32BitAppOnWin64IIS7(string serverName, string appPoolName)
{
Console.Out.WriteLine("Setting Enable32BitAppOnWin64 for {0} (IIS7)", appPoolName);
using (DirectoryEntry appPools =
new DirectoryEntry(String.Format("IIS://{0}/W3SVC/AppPools/{1}", serverName, appPoolName)))
{
appPools.Properties["Enable32BitAppOnWin64"].Value = true;
appPools.CommitChanges();
}
}
当然,那么你不必参考Microsoft.Web.Administration
组件。
与其试图再现别人的答案,不如试图链接到以前的提问者以及他们收到的答案。我希望他们有帮助。
- 1. C#为IIS-6和IIS-7创建IIS应用程序池和网站
- 2. 启用32位IIS应用程序池c#
- 3. IIS 7.5 32位应用程序池启动为64位
- 4. IIS和应用程序池32位和64位
- 5. 使用IIS 7.5在32位Windows 7上运行经典ASP应用程序
- 6. 为IIS 7应用程序
- 7. 使用iis 6/7执行应用程序的可靠性
- 8. 如何使用IIS 6 + FastCGI + Django安装程序启用SSL?
- 9. Windows 7(64位)上的IIS 7和Ms Access 32位32位
- 10. 在IIS 6和IIS 7/7.5中使用C#创建虚拟目录
- 11. 将ASP.NET 5 MVC 6应用程序部署到Linux和IIS 7
- 12. 将我的应用程序从IIS 6迁移到IIS 7不起作用
- 13. 如何启用路径信息iis 6和7
- 14. 如何使用WMI和C#以编程方式在IIS6和IIS 7中添加新应用程序映射?
- 15. 如何在IIS 6上启用HTTP PUT?
- 16. 的MVC 2应用程序在IIS 7
- 17. 将IIS 7连接到使用IIS的远程计算机6
- 18. 如何使用启动脚本更改IIS应用程序池管道模式
- 19. ASP网络MVC 3应用程序和Windows 7上的IIS/IIS Express 64位
- 20. 创建IIS 6应用程序池
- 21. IIS 6应用程序池管理
- 22. WCF - IIS 6与IIS 7
- 23. 如何从32位C++应用程序启动64位Java应用程序?
- 24. 主Web应用程序中的IIS 7 Web应用程序
- 25. IIS 7.5使用32位驱动程序而不是64位
- 26. 在IIS 7.5上使用dot net 1.1(windows 7 - 32位)
- 27. IIS 6 + JBoss 7 Web应用程序URL配置
- 28. IIS 7 Faulting应用程序名称:w3wp.exe
- 29. 如何在Windows 7中向IIS添加Flex应用程序?
- 30. 如何在IIS 7中设置ASP.NET MVC 3子应用程序?
有没有常见的方法,因此没有共同的解决方案。你必须为IIS 6做点什么,而对于IIS 7来说则完全不同。 – 2012-04-18 08:31:10
@Lex当然,我知道。正如我提到的问题,我需要两个版本的分离解决方案。谢谢你的评论 – 2012-04-18 08:45:41