#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.