asp.net - 如何检测是否在 IIS 7 中启用了 ASP.NET

标签 asp.net iis iis-7

挑战在于确定是否以可靠和正确的方式在 IIS7 中启用了 ASP.NET。

在这种情况下,启用/禁用是通过进入:

Server Manager -> 
    Roles -> 
        Web Server (IIS) -> 
            Remove Role Services -> 
                Remove ASP.NET

确定这一点的自然位置应该在 applicationHost.config 文件中。但是,在启用或禁用 ASP.NET 的情况下,我们仍然有可用的“ManagedEngine”模块,并且我们仍然在标签中有 isapi 过滤器记录。

目前我能找到的最好方法是检查 标记是否包含 aspnet_isapi.dll,或者 ASPNET 跟踪提供程序是否可用。

然而,这些并没有直接检测到 ASP.NET 配置的存在,只是可以想象由用户重新配置的副作用。

如果可能的话,我宁愿通过检查 IIS 配置/设置而不是操作系统本身来做到这一点,尽管如果我们可以保证这种技术在使用 IIS7 时始终有效,那么枚举服务器上的角色和服务可能是可以接受的。

更新

感谢您的回复。为了明确我想要做什么,我将服务器配置中各个位置的设置提取到单个(只读) View 中,以显示用户需要配置哪些内容才能使软件工作。

我需要引入的设置之一是:
IIS Config showing ASP.NET not installed

以红色突出显示的那个。

我不需要操纵设置,只需重现它。我想看看用户在将 IIS 角色添加到服务器时是否选中了 ASP.NET 框,在这个例子中他们显然没有。

我想通过查看 IIS 中可靠的东西而不是枚举角色服务来做到这一点,因为我不想在不需要的检查中添加任何特定于平台的依赖项。我不知道是否有可能在没有角色/服务基础架构的服务器上安装 IIS7,但我宁愿不用担心。我也有很多库可以用来清理 IIS。

但是,我也很难找出如何枚举角色/服务,所以如果有一个涉及这样做的解决方案,它肯定会很有用,并且比检查拥有 ASPNET 跟踪提供程序的副作用要好得多躺在身边。

不幸的是,如果不检查 ASP.NET 按钮,仍然可以在 IIS applicationHost.config 文件中获取 ManagedEngine 模块,因此它不是可靠的检查。您还可以将 ASP.NET 映射为 isapi 过滤器,因此仅检查它们是不够的。在 ASP.NET 已安装但已被删除的情况下,这些事情尤其成问题。

看起来最好的解决方案是检查角色服务。然而,这方面的 API 信息看起来非常罕见,因此需要帮助。

最佳答案

知道他们是否检查过的绝对方法是搜索以下注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components

在那里你应该看到两个值设置为 1 , ASPNETNetFxEnvironmentNetFxExtensibility .此注册表项是 IIS 安装程序项,其中包含已在 IIS 中启用的所有组件。

关于asp.net - 如何检测是否在 IIS 7 中启用了 ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4438943/

相关文章:

php - "x-powered by"是什么意思?

c# - Web API 服务部署在 IIS 服务器上后未运行

asp.net - 您可以在 IIS 中运行 asp.net core 3.0 gRPC CLIENT 吗? (可能在 Azure 上?)

javascript - CORS、IIS7 和 PHP - Access-Control-Allow-Origin 错误

iis - 配置 IIS 以全局访问已部署的网站(通过 WAN)[注意 : I have static IP]

c# - 当前上下文中不存在名称 'ClientScript'

asp.net - 302 无限循环

c# - 使用 Environment.OSVersion 确定操作系统

c# - 使用 Web 服务时出错 : An existing connection was forcibly closed

ssl - msmdpump.dll 忽略基本身份验证