2016-11-22 5 views
0

Я пытаюсь прочитать реестр Windows, чтобы обновления моего приложения могли восстановить ранее сохраненный путь установки в качестве его DefaultDirName.Inno Setup - определение пути по умолчанию внутри [code]

Я где-то читал, что я должен вызвать функцию, например:

DefaultDirName="{code:GetPath}" 

Проблема заключается в том, что мне нужно, чтобы определить путь по умолчанию, в случае, если функция не находит предыдущую. Например, «C: \ MyPath». Поэтому я сделал это:

[Code] 
function GetPath(Value: String): String; 
var 
    OrigPath: string; 
begin 
    Result := '{sd}\MyPath'; 
    if RegQueryStringValue(HKCU, 'Software\MyApp', 'PathExec', OrigPath) then 
    Result := OrigPath; 
end; 

Это не работает. Когда я запускаю настройку, в диалоговом окне адресата назначения я получаю буквально «C: \ PathOfMySetup \ {sd} \ MyPath», а не «C: \ MyPath».

Что следует писать на этой первой строке «Результат: =», чтобы «MyPath» был создан на системном диске?

Спасибо.

+0

Как может быть 'HKCU' ключ реестра для вашего приложения, если вы только установка приложения? –

+0

Разве это не цель первого результата, как дефолт? Если RegQueryStringValue не сможет найти ключ, функция вернет мой C: \ MyPath, чтобы заполнить диалог dir, правильно? – mehrlich

+0

Но «DefaultDirName» - это путь установки по умолчанию для новых установок. При повторной установке/обновлении значение не используется (по умолчанию). Таким образом, ваш код на самом деле не имеет смысла для меня. Вы получите такое же поведение с простым 'DefaultDirName = {sd} \ MyPath'. –

ответ

0

Константы в Pascal Script не магически расширены. Вы должны расширить их явно с помощью ExpandConstant function:

Result := ExpandConstant('{sd}\MyPath'); 
+0

Спасибо! Это поставило проблему. – mehrlich

Смежные вопросы