如何使用 Inno Setup 根据注册表项选择在文件夹中安装插件/文件?

Posted

技术标签:

【中文标题】如何使用 Inno Setup 根据注册表项选择在文件夹中安装插件/文件?【英文标题】:How do I use Inno Setup to optionally install a plugin/file in a folder based on a registry entry? 【发布时间】:2010-09-12 10:00:49 【问题描述】:

Inno Setup 是一个不错的易于使用的安装程序。它在this *** question 中的评价很高。我需要将插件安装到与 3rd 方应用程序的安装文件夹相关的文件夹中。从文档中看如何做到这一点并不明显。

【问题讨论】:

【参考方案1】:

您可以在文档和示例代码中找到如何使用注册表项选择性地安装文件的答案,但这可能并不明显,因此这里有一些示例脚本 sn-ps 使用 Adob​​e 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 效率的建议。

【讨论】:

以上是关于如何使用 Inno Setup 根据注册表项选择在文件夹中安装插件/文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Inno Setup pascal 脚本从注册表中读取 MachineGuid

运行 Inno Setup Installer 时如何修改 PATH 环境变量?

Inno-Setup:如何让用户选择是不是自动启动?

inno setup 打包说明

inno setup 开机启动

inno setup如何做快速启动栏?