首页 > 解决方案 > IIS 6 元数据库 C#

问题描述

我有一个简单的 C# 应用程序,用于安装和配置我们的 Web 服务。其中一部分涉及使用提供给安装程序的命令行参数设置应用程序池标识属性。为此,我在自定义操作中使用以下代码:

using (System.DirectoryServices.DirectoryEntry appPools = new System.DirectoryServices.DirectoryEntry("IIS://Localhost/W3SVC/AppPools"))
{
    System.DirectoryServices.DirectoryEntry myAppPool = appPools.Children.Find("SomeAppPool", "IIsApplicationPool");
    myAppPool.Properties["AppPoolIdentityType"].Value = 3;
    myAppPool.Properties["WAMUserName"].Value = "SomeUserName";
    myAppPool.Properties["WAMUserPass"].Value = "SomePassword";
    myAppPool.Invoke("SetInfo", null);
    myAppPool.CommitChanges();
}

我们发现在较新的机器上,COM Exception 0x80005000除非 "IIS Metabase and IIS 6 configuration compatablility" 安装了该功能(即"Control Panel->Programs and Features->Turn Windows features on or off->Internet Information Services->Web Management Tools->IIS 6 Management Compatibility->IIS 6 Metabase and IIS 6 configuration compatibility"必须启用),否则此代码将出错。

由于这种更新应用程序池标识的方法似乎在 IIS 6 之后已被删除,这是否意味着有一种更新或更现代的方式来更新 IIS 应用程序池的 Identity 属性?我已经对此进行了广泛的谷歌搜索,并且使用 System.DirectoryServices.DirectoryEntry 命名空间似乎是我能找到的使用 C# 以编程方式设置应用程序池标识的唯一方法。

我可以使用此代码并要求"IIS Metabase and IIS 6 configuration compatablility"安装,但如果不推荐使用此代码以支持较新的方法,那么我宁愿只使用较新的方法。

标签: c#iisiis-6directoryentry

解决方案


推荐阅读