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