加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Inno Setup – 使用通配符注册表项设置DefaultDir?

发布时间:2020-12-15 09:34:31 所属栏目:大数据 来源:网络整理
导读:我最近开始使用Inno Setup尝试为游戏修改创建一个简单的.exe安装程序. 我的安装程序在大多数情况下工作正常,但目前它有点基础.我真的希望安装程序能够自动找到mod为其设计的游戏的安装目录(Dawn of War – Dark Crusade),这样用户就不需要手动浏览它了. 我已
我最近开始使用Inno Setup尝试为游戏修改创建一个简单的.exe安装程序.

我的安装程序在大多数情况下工作正常,但目前它有点基础.我真的希望安装程序能够自动找到mod为其设计的游戏的安装目录(Dawn of War – Dark Crusade),这样用户就不需要手动浏览它了.

我已经读过Inno安装程序可以根据注册表项设置DefaultDir.然而,虽然“目标”游戏确实创建了一个包含其安装目录的注册表项,但游戏可以通过数字方式(通过Steam)或物理方式购买,并根据其购买的格式创建不同的注册表项.我的mod可以使用格式,但如果有多个可能的注册表项格式,我不知道如何设置DefaultDir.

是否有某种’wilcard’功能将从其注册表项返回游戏的安装目录,而不必输入完整的注册表键值(即某种注册表通配符)?或者搜索它可能具有的两个可能的值,然后默认为{src},如果它也找不到?

解决方法

您可以通过 [Code]部分分配 DefaultDirName指令的值.例如,以下伪脚本显示如何在注册表中查询两个字符串值并将找到的第一个返回到 DefaultDirName指令.如果未找到任何查询的注册表值,则返回默认常量值:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={code:GetDirName}

[Code]
function GetDirName(Value: string): string;
var          
  InstallPath: string;
begin
  // initialize default path,which will be returned when the following registry
  // key queries fail due to missing keys or for some different reason
  Result := '{pf}Default Dir Name';
  // query the first registry value; if this succeeds,return the obtained value
  if RegQueryStringValue(HKLM,'SoftwareVendorApplication','First Key',InstallPath) then
    Result := InstallPath
  // otherwise the first registry key query failed,so...
  else
  // query the second registry value; if it succeeds,'Second Key',InstallPath) then
    Result := InstallPath;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读