Этого можно добиться с помощью константы скрипта.
Вы определяете функцию, которая выдает нужное вам значение:
[Code]
function GetServiceInstallationPath(Param: string): string;
var
Value: string;
begin
if RegQueryStringValue(
HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\APPLICATION',
'ImagePath', Value) then
begin
Result := ExtractFileDir(Value);
end
else
begin
Result := { Some fallback value }
end;
end;
И затем вы ссылаетесь на него, используя {code:GetServiceInstallationPath}
, где вам это нужно (например, в разделе [Run]
).
Например:
[Run]
Filename: "{code:GetServiceIntallationPath}\SomeApp.exe"
На самом деле, вы, вероятно, уже хотите получить значение в InitializeSetup
, и кэшировать значение глобальной переменной для использования в скриптовой константе. И прервать установку (возвратив False
из InitializeSetup
), если другое приложение не установлено (= раздел реестра не существует).
[Code]
var
ServiceInstallationPath: string;
function InitializeSetup(): Boolean;
var
Value: string;
begin
if RegQueryStringValue(
HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\APPLICATION',
'ImagePath', Value) then
begin
ServiceInstallationPath := ExtractFileDir(Value);
Log(Format('APPLICATION installed to %s', [ServiceInstallationPath]));
Result := True;
end
else
begin
MsgBox('APPLICATION not installed, aborting installation', mbError, MB_OK);
Result := False;
end;
end;
function GetServiceInstallationPath(Param: string): string;
begin
Result := ServiceInstallationPath;
end;
См. также аналогичный вопрос: Использование глобальной строковой переменной сценария в разделе "Выполнить" в Inno Setup.
person
Martin Prikryl
schedule
08.01.2016