确定是在没有System.Web的ASP.NET或WinForms/console中运行

Bil*_* Jo 17 .net asp.net winforms

从类库中,我需要在运行时确定我是在ASP.NET应用程序还是WinForms/console应用程序中运行.已经有一些 其他 的问题 的问题,但所有这些解决方案都需要增加的System.Web参考.如果可能的话,在运行我的控制台和WinForms应用程序时,我不想将System.Web程序集加载到内存中,仅用于一行代码中的数千行.

Pau*_*sik 8

使用 System.Diagnostics.Process.GetCurrentProcess().ProcessName

如果您正在运行ASP.NET,那么程序集将被命名为:

  • 如果您运行的是IIS 6.0或IIS 7.0,则名称为w3wp.exe.

  • 如果您运行的是早期版本的IIS,则名称为aspnet_wp.exe.

另一个想法:如何使用AppDomain.CurrentDomain.GetAssemblies()API测试进程/应用程序域是否存在System.Web.dll?


dev*_*vio 5

您链接的一个问题包含一个表明Environment.UserInteractive答案.

您还可以尝试分析代码的StackTrace,以确定调用的位置.

  • 当一个控制台应用程序从Windows任务计划程序运行时,`Environment.UserInteractive`返回`false`,所以我不能依赖它作为区分Web应用程序和控制台应用程序的标志.我将尝试分析堆栈跟踪,看看我能想出什么. (2认同)
  • 此测试在Windows服务中也会失败 (2认同)