在IIS7中以编程方式安装ISAPI扩展

我想以编程方式在Windows7上的IIS7中安装ISAPI扩展 (控制面板 - >程序和功能 - >打开或关闭Windows功能 - > IIS-> WWW->应用程序开发功能 - > ISAPI扩展)。 基本上我想通过以下DISM命令实现我能做的事情 dism / online / Enable-Feature / FeatureName:IIS-ISAPIExtensions 我尝试使用Microsoft.Web.Administration,以下是代码
using (ServerManager serverManager = new ServerManager())
{
   Configuration config = serverManager.GetApplicationHostConfiguration();
   ConfigurationSection gloabalmodulesSection = config.GetSection("system.webServer/globalModules");
   ConfigurationElementCollection globalModulesCollection = gloabalmodulesSection.GetCollection();
   ConfigurationElement isapiExtension = globalModulesCollection.CreateElement("add");
   isapiExtension.SetAttributeValue("name", "IsapiModule");
   isapiExtension.SetAttributeValue("image", "%windir%\System32\inetsrv\isapi.dll");
   globalModulesCollection.Add(isapiExtension);

   ConfigurationSection modulesSection = config.GetSection("system.webServer/modules");
   ConfigurationElementCollection modulesCollection = modulesSection.GetCollection();
   ConfigurationElement isapiModule = modulesCollection.CreateElement("add");
   isapiModule.SetAttributeValue("name", "IsapiModule");
   modulesCollection.AddAt(10,isapiModule);

   ConfigurationSection handlersSection = config.GetSection("system.webServer/handlers");
   ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
   ConfigurationElement isapiHandler = handlersCollection.CreateElement("add");
   isapiHandler.SetAttributeValue("name", "ISAPI-dll");
   isapiHandler.SetAttributeValue("path", "*.dll");
   isapiHandler.SetAttributeValue("verb", "*");
   isapiHandler.SetAttributeValue("modules", "IsapiModule");
   isapiHandler.SetAttributeValue("resourceType","File");
   isapiHandler.SetAttributeValue("requireAccess","Execute");
   isapiHandler.SetAttributeValue("allowPathInfo","true");
   handlersCollection.AddAt(0, isapiHandler);
   serverManager.CommitChanges();
}
它确实更新了applicationHost.config。当我将使用我的代码更新的applicationHost.config与使用DISM更新的相同时,它们几乎相同。唯一的区别是,上面的代码没有在模块部分设置“lockItem = true”,因为写入会给出错误。但我觉得应该没关系。 但上面的代码没有安装该功能,DISM也没有。有什么不同 ? 我做了另一项测试。 1)使用DISM启用ISAPI扩展 2)保存了applicationHost.config的副本 3)使用DISM禁用ISAPI扩展 4)用保存的拷贝eariler覆盖apllicationHost.config 它不会安装ISAPI扩展功能。所以DISM不仅更新了applicationHost.config,还做了更多的事情。那么它做了什么以及如何以编程方式实现相同目标?     
已邀请:

要回复问题请先登录注册