2010-12-14 33 views
14

难题在于确定ASP.NET是否以可靠和正确的方式在IIS7中启用。如何检测ASP.NET是否在IIS 7中启用

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

的自然场所,以确定这应该是applicationHost.config文件中:

启用/禁用在这种情况下,通过进入完成。但是,在ASP.NET启用或禁用的情况下,我们仍然有“ManagedEngine”模块可用,并且我们仍然在标记中包含isapi过滤器记录。

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

但是,这些都没有直接检测到ASP.NET配置的存在,只是可能会被用户重新配置的副作用。

我宁愿通过检查IIS配置/设定,而非操作系统本身,如果可能的话,虽然列举了角色在服务器上&服务是可以接受的,如果我们能保证这个技术会一直努力,只要IIS7做到这一点用来。

更新

感谢您的答复。明确说明我想要做什么,我将服务器配置中各个位置的设置调整为单一(只读)视图,以显示用户需要配置的软件才能工作。

一个我需要带的设置是这样的一个:红色 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信息看起来很罕见,因此呼吁帮助。

+0

这是一个控制台/ Windows窗体应用程序或从IIS应用程序本身?你是指在一个特定的网站或一般? – Kev 2010-12-14 13:06:43

+0

检测来自Winforms应用程序。 – 2010-12-14 13:37:22

+0

检测一般需要完成。基本上,如果ASP.NET角色服务被删除,这是一个服务器范围的设置,我以可靠的方式来检测这种情况。 – 2010-12-14 13:38:42

回答

14

的绝对的方法可以知道,如果他们检查发现或不为搜索以下注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components 

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

+0

就是这样,完美,谢谢! – 2010-12-15 09:53:25

0

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

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


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

+0

我并不热衷于此。我真的在寻找一个特定的“缺少组件”测试,而不是在后台以编程方式设置端到端的检查,而无需询问用户,正确设计出所有需要的URL等。损坏的安装肯定是一个问题,但我更感兴趣寻找缺失的组件。出于我的目的,检查.net3文件夹是否已经足够。 – 2010-12-14 16:31:39

+0

就像我说的那样是懒惰的简单方法。您是否曾尝试在ASP.NET虚拟机中的干净机器上安装ASP.NET之前和之后执行applicationHost.config的快照? – jcolebrand 2010-12-14 16:34:29

+0

是的,我已经做了两个配置文件之间的差异,唯一可靠的是在问题中提到的两个设置。我已经用更具体的细节更新了这个问题。 – 2010-12-14 17:03:56

2

确定asp.net是否甚至是安装的功能(启用它的先决条件)可以通过PowerShell完成,这意味着如果您足够努力地挖掘,那么存在.net api。 PowerShell方法:

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

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

+0

任何人都知道如何反映或得到它反映的程序集?另外,看起来去SF是一个好主意。 – jcolebrand 2010-12-14 19:13:15

相关问题