我们常在给客户下载某个程序的时候,需要首先获知客户是否已经安装有CLR,现在最普遍的是判断是否安装有CLR2.0,下面是我在做某个软件下载的时候用到的一段算法,按照现实情况,支持到2011年没有问题。下面发出来,大家共勉。
最低要求是WINDOWS5.0,也就是WINDOWS2000,9X系列可以无视掉。最高判断出WINDOWS7。
string info = Request.UserAgent.ToString();
if (info.IndexOf("Windows NT 5") > 0)
{
if (info.IndexOf("NET CLR 2") > 0 || info.IndexOf("NET CLR 3") > 0 || info.IndexOf("NET CLR 4") > 0)
{
//绝对支持CLR2.0
}
else
{
//操作系统可能尚未安装.Netframework 2.0
//看情况给出用户手动选择项,有可能用户已经安装.Netframework 2.0,但是此时他们正在使用的浏览器没有发送CLR版本信息
}
}
else if (info.IndexOf("Windows NT 6") > 0 || info.IndexOf("Windows NT 7") > 0)
{
//绝对支持CLR2.0
}
else
{
//不支持CLR的可能性很大,很有可能不属于WINDOWS系统,可以视为不支持
}
这里又关系到一个问题,为什么我们要通过操作系统类型来判断呢?答案是我们只能通过操作系统类型来判断。因为客户端的浏览器并不保证一定会向服务器发送.NET版本信息,即使是安装了.NET的机器,如果使用Chrome或者早期版本的Firefox或者Opera,请看下面的一段UserAgent:
Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.3.154.9 Safari/525.19
这是一段来自Chrome的UserAgent,实际上已经安装有.Net,但是它并没有标明.Net的版本号,这就说明了我们不能依赖IE浏览器的UserAgent 中的类似“.NET CLR 3.0.04506.648”等字段。


