Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Проверка наличия .NET Framework и определение его версии

01.01.2007
{ **** UBPFD *********** by kladovka.net.ru ****
>> Проверка наличия .NET Framework и определение его версии
 
Функция возвращает номер последней установленной версии .NET Framework на компьютере, или пустую строку, если платформа .NET не установлена, либо установлена криво.
 
Зависимости: Registry, SysUtils
Автор:       Dimka Maslov, mainbox@endimus.com, ICQ:148442121, Санкт-Петербург
Copyright:   Dimka Maslov
Дата:        19 января 2004 г.
********************************************** }
 
function DotNetVersion: String;
var
 R
: TRegistry;
 L
: TStringList;
 S
: string;
 i
, MaxIndex, N, Code: Integer;
 V
, MaxVersion: Double;
const
 
RegKey = 'Software\Microsoft\.NETFramework\Policy';
begin
 
Result := '';
 R
:= TRegistry.Create;
 
try
  R
.RootKey := HKEY_LOCAL_MACHINE;
 
if R.KeyExists(RegKey) then begin
   R
.OpenKeyReadOnly(RegKey);
   L
:= TStringList.Create;
   
try
    R
.GetKeyNames(L);
   
MaxVersion := -1.0;
   
MaxIndex := -1;
   
for i := 0 to L.Count - 1 do begin
     S
:= L[i];
     
if UpCase(S[1]) = 'V' then begin
     
Delete(S, 1, 1);
     
Val(S, V, Code);
     
if (Code = 0) and (V > MaxVersion) then begin
       
MaxVersion := V;
       
MaxIndex := i;
     
end;
     
end;
   
end;
   
if MaxIndex <> - 1 then begin
     S
:= L[MaxIndex];
     R
.CloseKey;
     R
.OpenKeyReadOnly(RegKey+'\'+S);
     R.GetValueNames(L);
     MaxIndex := -1;
     for i := 0 to L.Count - 1 do begin
      Val(L[i], N, Code);
      if (Code = 0) and (N > MaxIndex) then MaxIndex := N;
     end;
     Result := S;
     Delete(Result, 1, 1);
     if MaxIndex <> -1 then Result := Result + '
.' + IntToStr(MaxIndex);
    end;
   finally
    L.Free;
   end;
  end;
 finally
  R.Free;
 end;
end;