Как читать из реестра ключ в цикле - PullRequest
1 голос
/ 25 марта 2011

Я делаю установщик, который добавляет функции к ранее установленной программе, своего рода дополнение.

Обязательная программа добавляет ключи реестра в соответствии с выпуском.

Я хочу прочитать этот ключ и проверить, совместим ли надстройка, подлежащая установке, с текущей версией программы, чтобы разрешить ее установку, в противном случае я хочу отобразить уведомление, сообщающее, чтосовместимая версия присутствует.

Мой код до сих пор:

Result: = RegKeyExists (HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Program\5.0.0');  
     if Result = False Then  
        MsgBox ('Error: NOT program is installed', mbInformation, MB_OK);  
     if Result = True Then      
        .....`

Нумерация версий идет как 5.0.0, 5.0.1, 5.0.2, 5.0.3 ....

Я хочу проверить несколько совместимых версий в цикле, как мне этого добиться?

1 Ответ

1 голос
/ 25 марта 2011

Если я правильно понимаю, вы хотите проверить количество совместимых установленных версий и продолжить, только если установлена ​​совместимая версия?

У вас есть разные варианты, если количество целевых версий не слишком великобыстрее всего проверить серию предопределенных версий, например:

Предупреждение Это не элегантное решение, просто работающее и простое в коде, будучи предупрежденным, посмотрите:

const
  MaxCompatibleVersions = 4;

function CompatibleVersionPresent: Boolean;
var
  I: Integer;
  CompatibleVersions: array[1..4] of string;
begin
  CompatibleVersions[1] := '5.0.0';
  CompatibleVersions[2] := '5.0.1';
  CompatibleVersions[3] := '5.0.2';
  CompatibleVersions[4] := '5.1.0';
  Result := False;
  for I := 1 to MaxCompatibleVersions do
  begin
    Result := Result or RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Program\' + CompatibleVersions[I]);  
    if Result then 
      Break;
  end;
  if not Result then
    MsgBox('Error, a compatible version of the program is not present, the plugin cannot be installed', mbError, MB_OK);
end;

procedure InitializeWizard();
begin
  if not CompatibleVersionPresent then
    Abort;
end;

Улучшение - это упражнение для читателя, некоторые подсказки:

  • Не хранить список совместимости в составе установщикаскрипт, включите текстовый файл со списком совместимых версий.Вы можете извлечь файл во временное место во время выполнения и выполнить проверку для этого файла
  • Прочитать установленную версию только один раз и сравнить с предварительно определенным массивом строк или StringList, загруженным из файла.
  • Лучшим решением, IMHO, было бы прочитать установленную версию, проанализировать ее (или сохранить в разных полях для основного, вспомогательного, выпуска) и затем выполнить своего рода проверку диапазона.Какая проверка действительна, зависит от вас и ограничений, наложенных вашей схемой совместимости.
...