挑战在于确定是否以可靠和正确的方式在 IIS7 中启用了 ASP.NET。
在这种情况下,启用/禁用是通过进入:
Server Manager ->
Roles ->
Web Server (IIS) ->
Remove Role Services ->
Remove ASP.NET
确定这一点的自然位置应该在 applicationHost.config 文件中。但是,在启用或禁用 ASP.NET 的情况下,我们仍然有可用的“ManagedEngine”模块,并且我们仍然在标签中有 isapi 过滤器记录。
目前我能找到的最好方法是检查
然而,这些并没有直接检测到 ASP.NET 配置的存在,只是可以想象由用户重新配置的副作用。
如果可能的话,我宁愿通过检查 IIS 配置/设置而不是操作系统本身来做到这一点,尽管如果我们可以保证这种技术在使用 IIS7 时始终有效,那么枚举服务器上的角色和服务可能是可以接受的。
更新
感谢您的回复。为了明确我想要做什么,我将服务器配置中各个位置的设置提取到单个(只读) View 中,以显示用户需要配置哪些内容才能使软件工作。
我需要引入的设置之一是:
以红色突出显示的那个。
我不需要操纵设置,只需重现它。我想看看用户在将 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
, ASPNET
和 NetFxEnvironment
和 NetFxExtensibility
.此注册表项是 IIS 安装程序项,其中包含已在 IIS 中启用的所有组件。
关于asp.net - 如何检测是否在 IIS 7 中启用了 ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4438943/