私の C# コードは、IIS (現在は 7.5 ですが、特定のバージョンには依存したくない) または他の場所で MVC3 アプリケーション内で実行されている可能性があります。
IIS でコードが実行されていることを確認する 1 つの方法は、現在のプロセス名を確認することのようですが、この方法は、ファイル名文字列をハードコードすることに依存しています。
IIS のバージョンに依存せずに、IIS でコードが実行されていることをプログラムで検出する方法はありますか?
私の C# コードは、IIS (現在は 7.5 ですが、特定のバージョンには依存したくない) または他の場所で MVC3 アプリケーション内で実行されている可能性があります。
IIS でコードが実行されていることを確認する 1 つの方法は、現在のプロセス名を確認することのようですが、この方法は、ファイル名文字列をハードコードすることに依存しています。
IIS のバージョンに依存せずに、IIS でコードが実行されていることをプログラムで検出する方法はありますか?
HostingEnvironmentクラス、特にIsHostedメソッドを見てください。
これは、ApplicationManagerでホストされているかどうかを示し、ASP.NET でホストされているかどうかを示します。
厳密には、IIS で実行しているとは言えませんが、これは実際にはニーズをよりよく満たしていると思います。
コード例:
// Returns the file-system path for a given path.
public static string GetMappedPath(string path)
{
if (HostingEnvironment.IsHosted)
{
if (!Path.IsPathRooted(path))
{
// We are about to call MapPath, so need to ensure that
// we do not pass an absolute path.
//
// We use HostingEnvironment.MapPath, rather than
// Server.MapPath, to allow this method to be used
// in application startup. Server.MapPath calls
// HostingEnvironment.MapPath internally.
return HostingEnvironment.MapPath(path);
}
else {
return path;
}
}
else
{
throw new ApplicationException (
"I'm not in an ASP.NET hosted environment :-(");
}
}
ServiceControllerクラスを見てください。サービス名は引き続きハードコーディングされますが、サービス名が変更される可能性は比較的低くなります。
netstat -ab
ポート 80 で何が実行されているかを調べるために使用することもできます。