追加 - c# ユーザーコントロール 呼び出し
コードがIIS内で実行されているかどうかを確認するにはどうすればよいですか。 (2)
私のC#コードは、IISのMVC3アプリケーション(現在は7.5ですが、特定のバージョンには依存しないようにしたい)の中などで実行されている可能性があります。
コードがIISの下で実行されていることを知る1つの方法は、現在のプロセス名を確認することですが、この方法はファイル名文字列をハードコードすることによって異なります。
コードがIISのバージョンに依存しないでIISの下で実行されていることを検出するためのプログラム的な方法はありますか?
HostingEnvironmentクラス、特にIsHostedメソッドを見てIsHosted 。
これにより、 ApplicationManagerでホストされているかどうかがわかります。また、 ApplicationManagerでホストされているかどうかがわかります。
厳密には、それはあなたが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で何が実行されているのかを調べることもできます。