以编程方式确定代码是否在IIS Express下运行

Goy*_*uix 23 c# iis iis-express

我不确定这是否可能,但我希望找到一条线索,以确定当前正在执行的代码是否在IIS Express下运行.到目前为止,我的最佳近似值,令人难以置信的hackish,肯定会在某些时候失败/突破:

bool IsExpress = 
  Request.ServerVariables["SERVER_SOFTWARE"] == "Microsoft-IIS/7.5"
  && Int32.Parse(Request.ServerVariables["INSTANCE_ID"]) > 1000000000;
Run Code Online (Sandbox Code Playgroud)

当然必须有更好的方法.我对Application,Server和Request对象的检查似乎没有揭示可能提供更好洞察力的任何内容.也许我只需要看一些其他对象?

更新:

如果有一种方法可以检测到这一点,我真的很好奇 - 在这一点上它确实是学术性的,我没有迫切需要使用它.最初的问题就是.但本着回应评论的精神,特别是我有兴趣回答本网站上另一个问题/答案的批评:如何搜索服务器的MIME地图.批评是,发布的答案不适用于IIS Express,只适用于传统的IIS实例.IIS Express将MIME配置存储在applicationhost.config XML文件中,我想更新该答案,以便为IIS Express提供返回该信息的方法.我当然可以添加一些从XML中获取适当值的代码(Yay for LINQ to XML!)但我真的想让它变得更聪明.为了清楚起见,我不需要帮助解析该文件 - 只是尝试检测代码当前是否在IIS Express引擎中执行时更优雅.

更新2:

IIS 8.0 Express Beta 本周发布,它进一步表明我的问题中的方法很脆弱并且会破坏.虽然它不是针对特定版本的交易破坏者,但考虑到这一点并尝试确保代码至少与今天的已知版本一起使用将会很好.

Str*_*lok 28

检查当前进程名称会起作用吗?

bool isExpress = 
  String.Compare(Process.GetCurrentProcess().ProcessName,"iisexpress") == 0;
Run Code Online (Sandbox Code Playgroud)

正常的IIS在w3wp.exe内存下运行.

  • 我测试了代码,应该更改为:bool isExpress = String.Compare(Process.GetCurrentProcess().ProcessName,"iisexpress")== 0; (3认同)