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;