2009-07-03 20 views
28

ASP.Netがコンピュータに正しく登録されているかどうかを判断する方法は誰にもあります(C#で理想的です)。ASP.Netが正しく登録されているかどうかを調べる

私はASP.Netアプリケーション用のインストールプログラムを作成しており、aspnet_regiisを実行する必要があるかどうかを知る必要があります。

現時点では、常にaspnet_regiis - 私はASP.Netが正しく登録されていることを確認するために実行しますが、これはすべてのアプリケーションプールの再起動を促すため望ましくありません。

ウェブ上にはいくつかの便利なページがありますが(例:http://www.codeproject.com/KB/cs/iisdetection.aspx)、そのポストショーのコメントとして、ASP.Netは登録されていますが、aspnet_regiisはまだ実行する必要がありますIIS。ユーザー 'JonB'は、IIS6(およびIIS6互換性を有効にしたIIS7)で動作するはずのようなものを投稿しましたが、IIS6互換モードを無効にして別の検出コードをIIS 7に書き込む必要があります。

誰もこのナッツをすでに割っていますか?もしそうなら、それは時間の節約になるのでお知らせください。そうしないと私は物事が同じであれば誰もが知ってい

...私は

<add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" /> 

最後の質問のためにapplicationHosts.config<isapiCgiRestriction>セクションを調べて見ていきますIIS6用とIIS7のためのC#へのC++のソリューションを試してみて、ポートします/ Windows 7の違いは?

答えて

10

まず、aspnet_regiis -lvを実行しようとします。これにより、次のような出力が得られます:

1.1.4322.0  Valid   C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll 
2.0.50727.0  Valid   c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll 

このような出力は、ターゲットバージョンがインストールされ、有効であることを確認するために簡単に解析できます。そうでない場合は、aspnet_regiis -iルートに移動する必要があります。

また、C#でこのチェックを行うことができれば、ASP.NETアプリケーションにテストページを追加できます。正常にインストールされたと思われるものを確認したら、そのテストページでHttpWebRequestを実行します。ページ自体は、空のページと同じくらいシンプルで、インストールの自己チェック(ファイル/フォルダのアクセス許可、DB設定など)を実行するほど複雑になり、すべてが正常であればHTTP 200しか返されません。タイムアウトまたはエラーが発生すると、不正なインストールが示されます。次に、オプションでテストページを削除します。

0

このスニペットはIIS7 +

using Microsoft.Web.Administration; 

private static string[] ARR_STR_SUPPORTED_APP_POOLS = 
         { "ASP.NET v4.0", "ASP.NET v4.5", ".NET v4.5", ".NET v4.0" }; 

public static ApplicationPool GetFirstSupportedAppPoolInstalled(this ServerManager mgr, IEnumerable<string> supportedAppPools) 
{ 
    ApplicationPool result = null; 
    foreach (string appPoolName in supportedAppPools) 
    { 
     result = mgr.ApplicationPools[appPoolName]; 
     if (result != null) 
      break; 
    } 
    return result; 
} 

... 
using (var mgr = new ServerManager()) 
{ 
    if (!mgr.IISAccessCheck()) 
     throw new ApplicationException("Error trying to access IIS 7!"); 

    ApplicationPool appPool = mgr.GetFirstSupportedAppPoolInstalled(ARR_STR_SUPPORTED_APP_POOLS); 
    if (appPool == null) 
     throw new ApplicationException("No appropriate .NET application pool found!"); 

    // you can do something with the app pool, if needed 
} 
... 

のために働くあなたが好きなあなたはそれを調整することができます。

関連する問題