Определение установленных версий .NET Framework в системе

Previous  Top  Next

    
 

 

 

Code:

/// <summary>

/// Enumerates all installed Common Language Runtime Engines.

/// </summary>

/// <param name="Index">Zero-based index of looked runtime

record.</param>

/// <returns>True if runtime with specified index found.</returns>

 

function EnumInstalledRuntimes(Index: Integer; out VersionName: String):

Boolean;

var

hkey: Windows.HKEY;

hsubkey: Windows.HKEY;

I: Cardinal;

J: Cardinal;

NameBuf: array[0..MAX_PATH] of Char;

CNameBuf: Cardinal;

lwt: TFileTime;

vt: DWORD;

AnyFound: Boolean;

begin

Result := False;

VersionName := '';

if ERROR_SUCCESS = RegOpenKeyEx(HKEY_LOCAL_MACHINE,

PChar('SOFTWARE\Microsoft\.NETFramework\policy'), 0,

KEY_ENUMERATE_SUB_KEYS, hkey) then

try

   I := 0;

   while True do

   begin

     AnyFound := False;

     CNameBuf := MAX_PATH + 1;

     if ERROR_SUCCESS <> RegEnumKeyEx(hkey, I, @NameBuf[0], CNameBuf,nil, nil, nil, @lwt) then

     begin

       Break;

     end;

     if (NameBuf[0] = 'v') and (NameBuf[1] in ['1'..'9']) then

     begin

       VersionName := String(NameBuf);

       if ERROR_SUCCESS = RegOpenKeyEx(hkey, @NameBuf[0], 0,KEY_QUERY_VALUE, hsubkey) then

       try

         J := 0;

         while true do

         begin

           CNameBuf := MAX_PATH + 1;

           if ERROR_SUCCESS <> RegEnumValue(hsubkey, J, @NameBuf[0],CNameBuf, nil, @vt, nil, nil) then

           begin

             Break;

           end;

           if (vt = REG_SZ) and (NameBuf[0] <> #0) then

           begin

             VersionName := VersionName + '.' + String(NameBuf);

             AnyFound := True;

             Break;

           end;

           Inc(J);

         end;

       finally

         RegCloseKey(hsubkey);

       end;

     end;

     Inc(I);

     if AnyFound then

     begin

       if Index = 0 then

       begin

         Result := True;

         Break;

       end;

       Dec(Index);

     end;

   end;

finally

   RegCloseKey(hkey);

end;

end;

 

 

Автор Акжан Абдулин

Взято с сайта http://www.delphikingdom.ru/

©Drkb::04636