2008-09-23 3 views
1

Inno Setup - хороший простой в использовании установщик. Он высоко оценен в this stackoverflow question. Мне нужно установить плагин в папку по отношению к папке установки стороннего приложения. Из документов не очевидно, как это сделать.Как использовать Inno Setup для установки плагина/файла в папке на основе записи в реестре?

ответ

4

Вы можете найти ответ на возможность установки файла с помощью записи реестра в документации и в примере кода, но это может быть не так очевидно, поэтому здесь приведены примеры фрагментов сценария с использованием Adobe Premiere Plugin в качестве примера:

клавиши шаги:

1) использовать Check: параметр

2) Написать функцию, которая вызывает RegQueryStringValue и анализировать путь построить относительный Plugin папка_назначения

3) использовать {код}: для вызова функции для возврата в папку назначения

// 
// Copy my plugin file to the Premiere Plugin folder, but only if Premiere is installed. 
// 
[Files] 
Source: "C:\sourceFiles\myplugin.prm"; Check: GetPremierePluginDestination; DestDir: "{code:PluginDestination}"; Flags: ignoreversion overwritereadonly 

[Code] 

var sPluginDest : String; 

// 
// Search for the path where Premiere Pro was installed. Return true if path found. 
// Set variable to plugin folder 
// 

function GetPremierePluginDestination(): Boolean; 
var 
    i:  Integer; 
    len: Integer; 

begin 
    sPluginDest := ''; 

    RegQueryStringValue(HKLM, 'SOFTWARE\Adobe\Premiere Pro\CurrentVersion', 'Plug-InsDir', sPluginDest); 
    len := Length(sPluginDest); 
    if len > 0 then 
    begin 
    i := len; 
    while sPluginDest[i] <> '\' do 
     begin 
     i := i-1; 
     end; 

    i := i+1; 
    Delete(sPluginDest, i, Len-i+1); 
    Insert('Common', sPluginDest, i); 
    end; 
    Result := len > 0; 
end; 

// 
// Use this function to return path to install plugin 
// 
function PluginDestination(Param: String) : String; 
begin 
    Result := sPluginDest; 
end; 

Я не программист Паскаль поэтому любые предложения по изготовлению более эффективной GetPremiereDestination приветствуются.