如何检测IIS 7中是否启用了ASP.NET

Jim*_*m T 20 asp.net iis iis-7

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

在这种情况下,通过以下方式完成启用/禁用:

Server Manager -> 
    Roles -> 
        Web Server (IIS) -> 
            Remove Role Services -> 
                Remove ASP.NET
Run Code Online (Sandbox Code Playgroud)

确定这个的自然位置应该在applicationHost.config文件中.但是,在启用或禁用ASP.NET的情况下,我们仍然可以使用"ManagedEngine"模块,并且我们仍然在标记中包含isapi过滤器记录.

我现在能找到的最好的方法是检查<isapiCgiRestriction>标签是否包含aspnet_isapi.dll,或者ASPNET跟踪提供程序是否可用.

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

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

更新

谢谢你的回复.清楚地说明我想要做什么,我将服务器配置中各种位置的设置拉到一个(只读)视图中,以显示用户需要配置什么才能使软件工作.

我需要引入的一个设置就是这个: IIS Config显示未安装ASP.NET

用红色突出显示的那个.

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

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

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

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

看起来最好的解决方案是检查角色服务.但是,关于此的API信息看起来非常罕见,因此请求帮助.

Car*_*res 16

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components
Run Code Online (Sandbox Code Playgroud)

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