1

我想以编程方式在 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) 使用保存的副本早期覆盖 allicationHost.config

它不安装 ISAPI 扩展功能。所以 DISM 不仅更新了 applicationHost.config,还做了更多的事情。那么它有什么作用,我如何以编程方式实现相同的目标?

4

0 回答 0