Получение номера версии файла в разделе [Реестр]

#registry #inno-setup #pascal

#реестр #inno-setup #pascal

Вопрос:

Я создаю установщик для проекта Visual Studio, используя inno setup. Я получаю сообщение об ошибке для

 "Parameter ValueData has invalid value"
  

для этого кода:

 [Code]
function GetVersion(AppVersion: String): String;
var
  Version: String;
  CharIndex: integer;
  c: char;
begin  
for CharIndex := 1 to Length(AppVersion) do begin
    c := AppVersion[CharIndex];
    if (c <> '.') then
    Version := Version   c;
end;
Result := Version;
end;

[Registry]
Root: HKCU; Subkey: "MyCompanyProduct"; ValueType: DWORD ; ValueName: "Version" ;     ValueData: GetVersion({#MyAppVersion}); Flags: uninsdeletekey;
  

У меня есть управление версиями, подобное этому «1.0.0.3, 1.0.0.4 и т. Д.». Итак, эта программа удаляет . и объединяет их все, чтобы сформировать номер, и должен пройти обратно для записи в реестр. Итак, я могу проверить это значение реестра и удалить или обновить предыдущую версию. Я слышал, как кто-то говорил, что inno будет обновляться автоматически, но я создаю значки с их именем и номером версии. Заранее спасибо.

Комментарии:

1. {#MyAppVersion] Возможно, проблема в этом, но вы ее не указали. (По умолчанию используется AppVersion без My префикса.)

Ответ №1:

Проблема, которую вы видите, заключается в том, что для вызова функции в качестве параметра в основных разделах InnoSetup вам необходимо использовать конструкцию {code:}.
Вот пример, который сработал для меня:

 [Registry]
Root: HKCU; Subkey: "SoftwareMyCompanyProduct"; ValueType: DWORD ; ValueName: "Version" ;     ValueData: {code:GetVersion|{#MyAppVersion}}; Flags: uninsdeletekey;
  

Ответ №2:

Как сказал @Ken White, ваша константа «сломана», что делает весь строковый литерал недействительным. Даже тогда вы ValueData по-прежнему просто GetVersion(WhateverMyAppVersionIs) вместо, если результат этой функции. Для этого используйте {code:} константу для вызова GetVersion.