1


1

C#でIIS仮想ディレクトリの.NETフレームワークがどのように使用されているかを調べるにはどうすればよいですか。 ユーザーに表示する必要があります。

System.DirectoryServicesを使用する。 System.IOを使用します。

プライベート列挙型IISVersion {IIS5、IIS6}

private void ReadVirtualDirectory(文字列サーバー、文字列ディレクトリ、IISVersionバージョン){文字列siteID =文字列。空。 string path = string.Empty;

switch(verison){case IISVersion.IIS5:path = string.Format( "IIS:// {0} / W3SVC / 1 / Root"、server);

if(!string.IsNullOrEmpty(directory)){path = string.Concat(path、 "/"、directory); }

ブレーク;

case IISVersion.IIS6:パス= string.Format( "IIS:// {0} / W3SVC"、server);

if(!string.IsNullOrEmpty(directory)){DirectoryEntry de = new DirectoryEntry(path);

foreach(de.Children内のDirectoryEntry子){if(child.Properties ["ServerComment"]。Value.ToString()。ToLower()==ディレクトリ){siteID = child.Name;ブレーク; }}

path = string.Concat(path、 "/"、siteID);

de.Close()de = null; }

ブレーク; }

DirectoryEntry iis = new DirectoryEntry(パス)。

//ここにiisプロパティを表示します //仮想ディレクトリが.NET 1.1または2.0で実行されているかどうかを表示する必要がある

iis.Close(); iis = null。 }

2 Answer


5


IISには、Webサイトまたは「仮想」ディレクトリ(Webアプリケーションフォルダ - アイコンとしてコグがあるもの)によって使用されているASP.NETバージョンを見つけるための困難で迅速な方法はありません。

これは、IISとメタベースのデータがスクリプトマップについてのみ認識し、ASP.NETのバージョンについては認識しないためです(やはりASP.NETは単なるISAPIアプリケーションです)。 ASP.NETのバージョンを確認する1つの方法は、次のようなものを使用することです。

システムを使用する。 System.DirectoryServicesを使用する。名前空間ConsoleApplication1 {クラスプログラム{静的voidメイン(文字列[]引数){文字列パス= @ "IIS:// Localhost / W3SVC / 1 / root / MyApp"; Console.WriteLine(GetAspNetVersion(path)); }

プライベート静的文字列GetAspNetVersion(文字列パス){using(DirectoryEntry app = new DirectoryEntry(path)){PropertyValueCollection pvc = app.Properties ["ScriptMaps"];

foreach(pvcの文字列scriptMap){if(scriptMap.StartsWith( "。aspx")){文字列[]マッピング= scriptMap.Split( '、');文字列scriptProcessor = mapping [1];

//バージョン番号は// C:¥Windows¥Microsoft.NET¥Framework¥//のパスから取得されます。//(scriptProcessor.Contains( "v1.1.4322")){ "1.1"を返します。 }

if(scriptProcessor.Contains( "v2.0.50727")){return "2.0";新しい例外( "不明なバージョンのASP.NETバージョン")をスローします。 }}}}

理想的ではありませんが、プロビジョニングアプリケーション/サービスのホスティング業者としてのニーズを満たすことはできませんでした。 IIS MMCプラグインが舞台裏で同様のチェックを実行しているのではないかと思います。 私がメタベース(Windows 2000およびWindows 2003ファイルベースのXML)を詳細に調べたところ、特定のASP.NETバージョン番号を格納する目立つプロパティ/属性はないことがわかりました。


4


これは最も美しい方法ではないかもしれませんが、* aspnet_regiis.exe -lk *からの出力を取得して解析できれば、必要な情報がすべて手に入ります。 SharePoint VHDからの出力の例:

C:¥WINDOWS¥Microsoft.NET¥Framework¥v2.0.50727> aspnet_Regiis -lk W3SVC / 1 /ルート/レポート/ 2.0.50727.0 W3SVC / 1 /ルート/レポートサーバー/ 2.0.50727.0 W3SVC / 1619303638 /ルート/ 2.0.50727.0 W3SVC / 1619303638 / Root / _layouts / images / 1.1.4322.2407 W3SVC / 1619303638 / Root / _layouts / inc / 1.1.4322.2407 W3SVC / 1720207907 / root / 2.0.50727.0 W3SVC / 1720207907 / root7.0 / Shared07.02 W3SVC / 1848312571 / Root / 2.0.50727.0 W3SVC / 1848312571 / Root / _layouts / images / 1.1.4322.2407 W3SVC / 1848312571 / Root / _layouts / inc / 1.1.4322.2407 W3SVC / 784543535 / Root / 2.0.50727.0 W3S35 / 78 / W43535 / 454 _layouts / images / 1.1.4322.2407 W3SVC / 784543535 / Root / _layouts / inc / 1.1.4322.2407 W3SVC / 98413328 / Root / 2.0.50727.0 W3SVC / 98413328 / Root / _layouts / images / 1.1.4322.2407 W3SVC / 9841332outs / Root inc / 1.1.4322.2407