Установить расширения ISAPI программно в IIS7 - PullRequest
1 голос
/ 29 сентября 2010

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

...