Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测IIS 7中是否启用了ASP.NET_Asp.net_Iis_Iis 7 - Fatal编程技术网

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

如何检测IIS 7中是否启用了ASP.NET,asp.net,iis,iis-7,Asp.net,Iis,Iis 7,挑战在于确定是否以可靠和正确的方式在IIS7中启用ASP.NET 在这种情况下,启用/禁用通过进入: Server Manager -> Roles -> Web Server (IIS) -> Remove Role Services -> Remove ASP.NET 确定这一点的自然位置应该在applicationHost.config文件中。但是,启用或禁用ASP.NET后,

挑战在于确定是否以可靠和正确的方式在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信息看起来非常稀少,因此需要帮助。

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

可能不是最优雅的,但它确实确保测试显示真正安装了哪些功能,而不是XML文件中安装了哪些功能



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

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

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

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components

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

这是控制台/windows窗体应用程序还是IIS应用程序本身?你的意思是在一个特定的网站上,还是仅仅是一般性的?检测是从winforms应用程序进行的。检测需要一般性地进行。基本上,如果ASP.NET角色服务被删除,这是一个服务器范围的设置,我正在寻找一种可靠的方法来检测这种情况。这里的目的是什么?好的,更明确地说,目的是引导用户了解软件需要在服务器上配置哪些方面,以及这些方面是否已配置。ASP.NET是正在检查的许多模块之一,包括IIS是否可用、位甚至时间同步。事实证明,只有ASP.NET是难以捉摸的。乍一看,这是一个常见的问题发现者。我对此不感兴趣。我真的在寻找一个特定的“this component is missing”(此组件缺失)测试,而不是在后台以编程方式设置端到端检查,而不询问用户,正确计算所有必要的URL等。损坏的安装肯定是一个问题,但我更感兴趣的是寻找缺失的组件。就我而言,检查.net3文件夹是否存在就足够了。就像我说的那样,这是一种简单的方法。您是否尝试过创建applicationHost.conf的快照