Установить расширения ISAPI программно в IIS7

Я хочу программно установить расширения ISAPI в IIS7 на Windows7

(Панель управления -> Программы и компоненты-> Включить или выключить функции 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) Включены расширения ISAPI с DISM 2) Сохранена копия applicationHost.config 3) Отключены расширения ISAPI с DISM 4) Перезаписать apllicationHost.config сохраненной копией

Он не устанавливает функцию расширения ISAPI. Так что DISM не только обновляет applicationHost.config, но и делает больше. Так что же он делает, и как я могу достичь того же программно?

0 ответов

Другие вопросы по тегам