Установить расширения 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, но и делает больше. Так что же он делает, и как я могу достичь того же программно?