web-dev-qa-db-ja.com

IIS 7でASP.NETが有効になっているかどうかを検出する方法

問題は、ASP.NETがIIS7内で信頼できる正しい方法で有効になっているかどうかを判断することです。

この場合、有効化/無効化は次のように入力して行われます。

Server Manager -> 
    Roles -> 
        Web Server (IIS) -> 
            Remove Role Services -> 
                Remove ASP.NET

これを決定する自然な場所は、applicationHost.configファイル内である必要があります。ただし、ASP.NETを有効または無効にしても、「ManagedEngine」モジュールがまだ利用可能であり、タグにisapiフィルターレコードが残っています。

現時点で私が見つけることができる最良の方法は、<isapiCgiRestriction>タグにaspnet_isapi.dllが含まれているかどうか、またはASPNETトレースプロバイダーが使用可能かどうかを確認することです。

ただし、これらはASP.NET構成の存在を直接検出するのではなく、ユーザーが再構成できると考えられる副作用のみを検出します。

可能な場合は、OS自体ではなくIIS configuration/setupを調べることでこれを行いますが、この手法を保証できる場合は、サーバーの役割とサービスを列挙しても問題ありません。 IIS7を使用する場合は常に機能します。

更新

回答ありがとうございます。私が何をしたいかを明確にして、サーバーの構成のさまざまな場所の設定を1つの(読み取り専用)ビューにプルして、ソフトウェアを機能させるためにユーザーが構成する必要があるものを示しています。

私が持ち込む必要がある設定の1つはこれです: IIS Config showing ASP.NET not installed

赤で強調表示されているもの。

設定を操作する必要はなく、再現するだけです。ユーザーがIISロールをサーバーに追加したときに、ASP.NETボックスをオンにしたかどうかを確認します。この例では明らかにそうではありません。

必要のないチェックにプラットフォーム固有の依存関係を追加したくないので、ロールサービスを列挙するのではなく、IISで信頼できるものを見て、これを実行したいと思います。 。役割/サービスインフラストラクチャを持たないサーバーにIIS7をインストールすることが可能になるかどうかはわかりませんが、優先的には心配しません。 IISを既にスクラブしています。

ただし、役割/サービスを列挙する方法を見つけるのも難しいので、それを行うソリューションがある場合、それは確かに有用であり、ASPNETトレースプロバイダーの副作用を確認するよりもはるかに優れています。周りに横たわっている。

残念ながら、ASP.NETボタンをチェックしない場合でも、IIS applicationHost.configファイルでManagedEngineモジュールを取得できるため、信頼できるチェックではありません。ASP .NETはisapiフィルターとしてマップされているため、それらをチェックするだけでは不十分です。ASP.NETがインストールされているが削除されている場合、これらの問題は特に問題になります。

最良の解決策は、役割サービスを調べることです。ただし、これに関するAPI情報は非常にまれに見えるため、助けが必要です。

20
Jim T

彼らがそれをチェックしたかどうかを知る絶対的な方法は、次のレジストリキーを検索することです:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components

そこには、1ASPNETNetFxEnvironmentNetFxExtensibilityに設定された2つの値があります。このレジストリキーは、IIS IISで有効になっているすべてのコンポーネントを含むセットアップキーです。

16

Asp.netがインストール済みの機能であるかどうか(それを有効にするための前提条件)かどうかは、PowerShellを使用して判断できます。つまり、十分に徹底的に調査すれば、そこに.net apiが存在することになります。 PowerShellメソッド:

Import-Module servermanager
Get-WindowsFeature web-asp-net

タイプMicrosoft.Windows.ServerManager.Commands.Featureのオブジェクトを返します。 installedプロパティはブール値で、機能がインストールされているかどうかを示します。

2
sysadmin1138

だからあなたは簡単な方法が欲しいですか? 「ASP.NETをインストールする必要があります」というプレースホルダーのdivにエラーブロックがあり、HTMLとして表示される素敵な.aspxページを作成し、ASP.NETがインストールされているときに「ASP.NETがインストールされている」と変更する"そして、IISとして*:80サイトとして識別されたディレクトリにコピーした後、ツールがデフォルトのブラウザでこのWebページを起動するようにします(またはIISプログラムでXMLを変更し、後で削除する)

最も洗練されているわけではありませんが、XMLファイルにある機能ではなく、実際にインストールされている機能をテストで確認できます。


それは「怠惰な無知な方法でやる」という悲鳴を上げるので、私がJavaScriptで使用できる機能を知る唯一の方法は、使用する前にそれらをテストするか、またはそれらがあると仮定して、爆破するのを見てください。私の要点は、ファイルで何が報告されるかではなく、実際に何を使用できるかということです。 C:\ Windows\Micrsoft.Net\Framework\v3.xxxxxxxxが存在し、ファイルがあるからといって、DLLがGACに登録されているわけではありませんか?

0
jcolebrand