Как использовать Inno Setup, чтобы при необходимости установить плагин / файл в папку на основе записи реестра? - PullRequest
1 голос
/ 23 сентября 2008

Inno Setup - это удобный и простой в использовании установщик. Это высоко оценивается в в этом вопросе о переполнении стека . У меня есть необходимость установить плагин в папку, относящуюся к папке установки стороннего приложения. Из документов не очевидно, как это сделать.

1 Ответ

4 голосов
/ 23 сентября 2008

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

Ключевые шаги:

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

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

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

//
// 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;

Я не программист на Pascal, поэтому любые предложения по повышению эффективности GetPremiereDestination приветствуются.

...