プログラムで 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) 前に保存したコピーで apllicationHost.config を上書きしました
ISAPI 拡張機能はインストールされません。したがって、DISM は applicationHost.config を更新するだけでなく、それ以上のことを行います。では、それは何をし、プログラムで同じことをどのように達成できますか?