При создании установщика для проекта Visual Studio с использованием Inno Setup, разработчики часто сталкиваются с необходимостью записи номера версии приложения в системный реестр. Это важно для корректного управления версиями при обновлении и удалении приложения. Однако, ошибка "Parameter ValueData has invalid value" может возникнуть при попытке записи значения версии в реестр, если не соблюдать правильный синтаксис.
Описание проблемы
Пользователь столкнулся с ошибкой в коде Inno Setup, где пытается извлечь номер версии из строки и записать его в реестр. Функция GetVersion предназначена для удаления символов точки из строки версии и возвращает числовой эквивалент. Однако, при попытке использовать результат этой функции в секции [Registry], возникает ошибка.
Пример кода, вызывающего ошибку
[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: "MyCompany\Product"; ValueType: DWORD; ValueName: "Version"; ValueData: GetVersion({#MyAppVersion}); Flags: uninsdeletekey;
Причина ошибки
Проблема заключается в том, что для вызова функции в параметре ValueData секции [Registry] необходимо использовать специальный синтаксис {code:}. Это позволяет Inno Setup правильно интерпретировать вызов функции и использовать результат её выполнения.
Подтвержденное решение
Для корректной записи номера версии в реестр, следует использовать следующий синтаксис в секции [Registry]:
Здесь {code:GetVersion|{#MyAppVersion}} указывает Inno Setup на вызов функции GetVersion с передачей в неё значения константы {#MyAppVersion}.
Альтернативный ответ и комментарии
Пользователь также упоминает, что {#MyAppVersion} может быть проблемой, и что по умолчанию используется константа AppVersion без префикса My. В этом случае важно убедиться, что константа {#MyAppVersion} определена и корректно используется в проекте.
Заключение
Исправление синтаксиса в секции [Registry] позволит корректно записать номер версии приложения в системный реестр, что важно для управления версиями при установке и обновлении приложений, созданных с помощью Inno Setup и Visual Studio.
Разработчик столкнулся с ошибкой при записи номера версии в системный реестр через Inno Setup из-за неправильного синтаксиса в параметре ValueData секции [Registry].
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.