Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Delphi .NET
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.08.2009, 09:09
Аватар для XIO
XIO XIO вне форума
Новичок
 
Регистрация: 06.12.2007
Сообщения: 77
Репутация: 32
По умолчанию Определение наличия DOT.NET и его версии в ОС

Всем доброго времени суток. Надеюсь пишу в нужном разделе...

Есть вопрос, как определить установлен в ОС DOT.NET или нет, и если да то какая версия стоит. Думаю что это где-то в реестре должно быть прописано, а где именно пока не нашёл. Если кто знает, буду рад подсказке
__________________
"Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт
Ответить с цитированием
  #2  
Старый 28.08.2009, 12:03
Аватар для XIO
XIO XIO вне форума
Новичок
 
Регистрация: 06.12.2007
Сообщения: 77
Репутация: 32
По умолчанию Нашёл готовое решение:

Код:
/// <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;

Работает. Всем спасибо =)
__________________
"Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter