1

プログラムで 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 を更新するだけでなく、それ以上のことを行います。では、それは何をし、プログラムで同じことをどのように達成できますか?

4

0 に答える 0