zby*_*our 13 asp.net aspnet-regiis.exe .net-4.0 iis-7.5
有没有可靠的方法如何检查ASP.NET 4.0是否以编程方式在IIS 7.5上注册?在ASP.NET应用程序安装开始之前,我需要在安装程序中测试它作为先决条件.
如果ASP.NET 4.0没有在IIS上注册,以后安装过程中只安装了应用程序无法运行并返回500内部服务器错误(现在解决问题为时已晚).相反,我想在任何安装步骤开始之前显示一些警告(并提示如何解决问题).但还没有找到可靠的解决方案.
AFAIK,有时读取的注册表项可能无法正常工作.所以现在,我运行aspnet_regiis.exe -lv列出版本(如此处所示)并解析输出.但即使.NET未正确注册,我的测试(错误地)成功,因为输出是(包含版本4.0):
2.0.50727.0 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll
4.0.30319.0 C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll
Run Code Online (Sandbox Code Playgroud)
(Win7 32bit)
aspnet_regiis.exe -ir在这种情况下,跑步可以修复它.
它与此问题类似,但我需要以编程方式对其进行测试.
你有什么想法或经历吗?
Cze*_*nda 10
使用您自己的答案作为基础,也可以使用命令行(带高程)来完成:
%WINDIR%\System32\inetsrv\appcmd.exe list apppool /managedRuntimeVersion:v4.0
Run Code Online (Sandbox Code Playgroud)
如果返回任何内容,则注册ASP.NET 4.0.这种方法的问题是,即使未安装过滤器,似乎也可以手动创建4.0应用程序池,然后此方法将无法工作.
编辑:我最终运行了这三个检查:
aspnet_regiis.exe -lv (应返回包含"c:\ Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"的行)appcmd.exe list apppool /managedRuntimeVersion:v4.0 (应返回包含"MgdVersion:v4.0"的行)appcmd.exe list config -section:system.webServer/isapiFilters (应返回包含"c:\ Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll"的行)请注意,我只关心32位版本.
如果所有三个检查都通过,则可以断定ASP.NET 4.0已注册.尽管如此,仍然不是100%的误报.
这是一个老问题,但我发布了一个答案,因为你的问题是谷歌的最佳结果之一,而且没有答案.
您正在寻找的注册表项是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0.如果存在该密钥,则已安装.Net 4并在IIS中注册.
如果您只想检查是否安装了.Net 4,可以查看HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.
摘要:上述问题出现在非服务器操作系统(Win7)上。即使您在 .NET 4.0之前安装 IIS,.NET 4.0 也不会在 IIS 上注册(因此 .NET 应在 IIS 上正确注册)。这会在任何 ASP.NET 应用程序安装过程中导致意外问题 — 直到aspnet_regiis.exe -ir从命令行运行为止。Win 2008 没有问题(即,当 IIS 在 .NET 4.0 之前安装时,.NET 在 IIS 上正确注册,并且一切按预期工作)。
最后我的同事告诉我这个问题可能的解决方案。我已经验证以下解决方案工作正常(也在 Win7 上)。ServerManagerfromMicrosoft.Web.Administration命名空间可以很容易地使用:
public static bool IsAspNetRegistered()
{
using (var mgr = new ServerManager())
{
return mgr.ApplicationPools.Any(pool => pool.ManagedRuntimeVersion == "v4.0");
}
}
Run Code Online (Sandbox Code Playgroud)
如果 .NET 在 IIS 上成功注册,则至少有一个应用程序池的运行时版本设置为“v4.0”,因此这一事实用于检查。
当然,如果有人删除了所有应用程序池,则此方法可能无法正常工作。但这是有点病态的情况,我不在乎。主要问题是防止尽管一切都按照我们的安装建议完成,但仍然无法在计算机上安装应用程序。
| 归档时间: |
|
| 查看次数: |
41675 次 |
| 最近记录: |