论坛里面有人问,假设某Windows机器上已安装了.Net Framework 3.5,如何判断有没有安装.Net Framework 3.5 SP1?
这个问题,我首先想到,每一个版本的.Net Framework的安装过程都会在Windows目录下的\Microsoft.NET\Framework目录中生成一个子目录(安装目录)。比如说,假设Windows目录在C盘且不曾在安装OS时重命名过Windows目录,那么.Net Framework 3.5的安装目录应该是:
C:\Windows\Microsoft.NET\Framework\v3.5
在这个目录下应该有一个该版本的MSBuild.exe,我们执行 MSBuild /version 应该能得到版本信息。
为了提高命令的适应性我们用 %WINDIR% 来代替 C:\Windows ,然后我们在控制台中执行下列命令:
cd %WINDIR%\Microsoft.NET\Framework\v3.5
MSBuild /version
这样得到的输出信息里面就包含了这台计算机上.Net Framework 3.5的确切版本。
我的执行结果如下:
那么这个版本号 3.5.30729.5420 能否说明我们有没有安装.Net 3.5 SP1呢?我们查看这个地址:
What .NET Framework version numbers go with what service pack
http://blogs.msdn.com/b/astebner/archive/2005/07/12/438245.aspx
从这个列表中,我们可以看到,我们实际的版本号 3.5.30729.5420 应该是不小于.Net 3.5 SP1 的。
这是判断方法之一。
还有一种判断方法是从注册表来判断。在命令行中运行regedit,搜索“Net Framework Setup”:
这样我们就可以搜到这样的一个路径:
从这个搜索结果来看,我们能够在这个路径下看到我们安装过各个版本的 .Net Framework 的“芳踪”:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\
注意是在Windows 7上搜索的结果。我没有验证在Windows XP、Vista上这个路径会不会不一样。我猜测应该是一样的。
看样子遍历这个路径下的sub path就能够得到所有已安装的.Net Framework的版本信息。
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5 这个路径下,我们可以看到,版本(Version)是 3.5.30729.5420,与我们前面的判断方法结果一致。SP这一项的键值是 1,意思是已安装 SP1。
参考文献:
- What .NET Framework version numbers go with what service pack http://blogs.msdn.com/b/astebner/archive/2005/07/12/438245.aspx
- How to determine which versions and service pack levels of the Microsoft .NET Framework are installedhttp://support.microsoft.com/kb/318785
- [NSIS] Get .NET Version http://nsis.sourceforge.net/Get_.NET_Version