【问题标题】:How to detect if ASP.NET is enabled in IIS 7如何检测是否在 IIS 7 中启用了 ASP.NET
【发布时间】:2010-12-14 12:04:30
【问题描述】:

挑战在于确定是否以可靠和正确的方式在 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 运行时始终有效,那么枚举服务器上的角色和服务可能是可以接受的用过。

更新

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

我需要引入的设置之一是:

以红色突出显示的那个。

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

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

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

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

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

【问题讨论】:

  • 这是控制台/Windows 窗体应用程序还是来自 IIS 应用程序本身?您是指在特定网站还是一般情况下?
  • 检测来自 Winforms 应用程序。
  • 一般需要做检测。基本上,如果 ASP.NET 角色服务被删除,这是一个服务器范围的设置,我正在寻找一种可靠的方法来检测这种情况。
  • 这里的意图是什么?
  • 好的,更明确地说,目的是引导用户了解软件需要在服务器上配置哪些方面,以及这些方面是否已配置。 ASP.NET 是被检查的众多模块之一,包括 IIS 是否可用、BITS 甚至时间同步。只有 ASP.NET 被证明是难以捉摸的。这是第一个脸红的常见问题查找器。

标签: asp.net iis iis-7


【解决方案1】:

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components

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

【讨论】:

    【解决方案2】:

    甚至可以通过 PowerShell 确定 asp.net 是否是已安装的功能(启用它的先决条件),这意味着如果你足够努力的话,那里有 .net api。 PowerShell 方法:

    Import-Module servermanager
    Get-WindowsFeature web-asp-net
    

    这将返回Microsoft.Windows.ServerManager.Commands.Feature 类型的对象。 installed 属性是布尔值,指示是否安装了该功能。

    【讨论】:

    • 有谁知道如何反映这一点或得到它所在的程序集进行反映?另外,看起来去旧金山是个好主意。
    【解决方案3】:

    那么你想要简单的方法吗?制作一个漂亮漂亮的 .aspx 页面,显示为 HTML,在占位符中的 div 中有一个错误块,说“您需要安装 ASP.NET”,并在安装 ASP.NET 时将其更改为“已安装 ASP.NET” " 然后让工具在将其复制到 IIS 中标识为 *:80 站点的目录后,在默认浏览器中启动该网页(或通过更改 XML 以编程方式在 IIS 中创建目录映射,然后稍后将其删除)

    可能不是最优雅的,但它确实可以确保测试显示真正安装的功能与 XML 文件中的功能。


    因为那会尖叫“用懒惰无知的方式去做”,我会提醒你,我在 javascript 中知道我可以使用哪些功能的唯一方法是在我尝试使用它们之前测试它们,或者假设它们'在那里,看着它爆炸。我的观点是,文件中报告的内容并不重要,重要的是您可以实际使用什么。仅仅因为 C:\Windows\Micrsoft.Net\Framework\v3.xxxxxxxx 存在并且有文件并不意味着 dll 已在 GAC 中注册,是吗?

    【讨论】:

    • 我不喜欢这个。我真的在寻找一个特定的“这个组件丢失”测试,而不是在后台以编程方式设置端到端检查,而不询问用户,正确计算出所有必要的 url,等等。损坏的安装绝对是个问题,但我对寻找缺失的组件更感兴趣。就我而言,检查 .net3 文件夹是否存在就足够了。
    • 好吧,就像我说的那样,这是一种懒惰的简单方法。您是否尝试过在虚拟机的干净机器上安装 ASP.NET 前后对 applicationHost.config 进行快照?
    • 是的,我已经对两个配置文件进行了比较,唯一可靠的是问题中提到的两个设置。我已经用更具体的细节更新了这个问题。
    • 感谢您的更新。我认为这使它稍微清楚一点。另外,我也没有头绪。会考虑一下。
    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 2012-03-15
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多