web-dev-qa-db-ja.com

ASP.Netが正しく登録されているかどうかの確認

ASP.Netがコンピューターに適切に登録されているかどうかを確認するための防弾方法(理想的にはC#で!)

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

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

Webにはいくつかの便利なページがあります(例 http://www.codeproject.com/KB/cs/iisdetection.aspx )が、その投稿のコメントが示すように、それはかなり頻繁に起こりますレジストリは、ASP.Netが登録されていることを報告しますが、IISを構成するにはaspnet_regiisを実行する必要があります。ユーザー 'JonB'は、IIS6(およびIIS6互換性を有効にしたIIS7)で機能するように見えるものを投稿しましたが、IIS 7 for IIS6互換性モードを無効にして)の個別の検出コードを書く必要があります。

それで、誰かがすでにこのナットをクラックしましたか?その場合は時間の節約になりますのでお知らせください。それ以外の場合は、IIS6のC++ソリューションをC#に移植してみます。IIS7の場合、<isapiCgiRestriction>applicationHosts.configセクションを調べて、

<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" />

最後の質問...

何かがWindows 7で同じ/異なるかどうか誰かが知っていますか?

28
Chris Fewtrell

まず、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を返します。タイムアウトまたはエラーは、インストールが不適切であることを示します。次に、オプションで、テストページを削除します。

10
Gonzalo

このスニペットは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
}
...

必要に応じて調整できます。

0
Learner