挑战在于确定是否以可靠和正确的方式在IIS7中启用了ASP.NET。
在这种情况下,通过进入:
完成启用/禁用Server Manager ->
Roles ->
Web Server (IIS) ->
Remove Role Services ->
Remove ASP.NET
确定这个的自然位置应该在applicationHost.config文件中。但是,在启用或禁用ASP.NET的情况下,我们仍然可以使用“ManagedEngine”模块,并且我们仍然在标记中包含isapi过滤器记录。
目前我能找到的最好的是检查< isapiCgiRestriction> tag包含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信息看起来非常罕见,因此请求帮助。
答案 0 :(得分:16)
知道他们是否检查过的绝对方法是搜索以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components
在那里你应该看到两个值设置为1
,ASPNET
和NetFxEnvironment
以及NetFxExtensibility
。此注册表项是IIS安装程序密钥,其中包含IIS中已启用的所有组件。
答案 1 :(得分:2)
确定asp.net是否是一个已安装的功能(启用它的先决条件)可以通过PowerShell完成,这意味着如果你足够努力挖掘就有.net api。 PowerShell方法:
Import-Module servermanager
Get-WindowsFeature web-asp-net
将返回Microsoft.Windows.ServerManager.Commands.Feature
类型的对象。 installed
属性为布尔值,表示是否已安装该功能。
答案 2 :(得分:0)
所以你想要简单的方法吗?创建一个漂亮的.aspx页面,显示为HTML,并在占位符中的div中显示错误块,说明“您需要安装ASP.NET”并在安装的ASP.NET上对其进行更改,而不是说“已安装ASP.NET” “然后让工具在默认浏览器中启动此网页后,将其复制到IIS中标识为*:80网站的目录(或通过更改XML然后在以后删除它,以编程方式在IIS中创建目录映射)
可能不是最优雅的,但确实可以确保测试显示哪些功能是真正安装的,而不是XML文件中的内容。
因为那会尖叫“以懒惰无知的方式做”我会提醒你,我在javascript中知道我可以使用的唯一方法是在我尝试使用它们之前测试它们,或者假设它们'在那里,看着它炸毁。我的观点是,在文件中报告的内容并不重要,重要的是您可以实际使用的内容。仅仅因为C:\ Windows \ Micrsoft.Net \ Framework \ v3.xxxxxxxx存在并且有文件并不意味着dll已在GAC中注册,是吗?