注册表部分的脚本功能

2024-02-01

我们的软件支持一系列(~70)文件关联,用户可以选择与我们的应用程序关联。 直接在Registry安装程序部分并使用标志来控制卸载期间的行为以及Check标志来控制是否应将其写入注册表。 用户可以通过自定义页面控制要设置的关联CheckListBox.

我现在想知道是否有一种方法可以循环CheckBox的项目CheckListBox在 - 的里面Registry部分?目前我只能想象我必须通过以下方式创建所有注册表项Code部分,但这需要我还为卸载程序编写代码,因为控制卸载行为的标志在这里不可用?


您不能使用 Pascal 代码来生成Registry节条目。

但你可以使用Inno安装预处理器 https://jrsoftware.org/ispphelp/生成你的Registry部分以及将扩展添加到的代码CheckListBox。像这样的事情:

#define Extension(Mode, Ext) \
  Mode == "Registry" ? \
    "Root: HKCU; Subkey: ""Software\My Company""; ValueType: string; ValueName: """ + \
      Ext + """; ValueData: ""yes""; Check: RegisterExtension('" + Ext + "')" + NewLine \
  : Mode == "Check" ? \
    "  if (Ext = '" + Ext + "') and CheckListBox.Checked[I] then Exit;" + NewLine + \
    "  Inc(I); " + NewLine \
  : Mode == "AddCheckbox" ? \
    "  CheckListBox.AddCheckBox('" + Ext + "', '', 0, True, True, False, True, nil);" + \
      NewLine \
  : ""


#define Extensions(Mode) \
  Extension(Mode, 'jpg') + \
  Extension(Mode, 'gif') + \
  Extension(Mode, 'png') + \
  ""
[Registry]
#emit Extensions("Registry")
[Code]

var
  CheckListBox: TNewCheckListBox;

function RegisterExtension(Ext: string): Boolean;
var
  I: Integer;
begin
  I := 0;
  Result := True;
  #emit Extensions("Check")
  Result := False;
end;

procedure AddExtensionsToCheckListBox;
begin
  #emit Extensions("AddCheckbox")
end;
  • Registry条目只是一个(无用的)示例。
  • Call AddExtensionsToCheckListBox代码中的某个地方,您正在创建CheckListBox.

See my 其他答案 https://stackoverflow.com/q/60460082/850848#60502833一个不太优雅但更具可读性的解决方案。


要查看它的作用,请将其添加到脚本的末尾:

#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")

检查Preprocessed.iss编译后。它应该给你类似的东西(添加空行和换行以提高可读性):

[Registry]
Root: HKCU; Subkey: "Software\My Company"; ValueType: string; ValueName: "jpg"; \
  ValueData: "yes"; Check: RegisterExtension('jpg')
Root: HKCU; Subkey: "Software\My Company"; ValueType: string; ValueName: "gif"; \
  ValueData: "yes"; Check: RegisterExtension('gif')
Root: HKCU; Subkey: "Software\My Company"; ValueType: string; ValueName: "png"; \
  ValueData: "yes"; Check: RegisterExtension('png')

[Code]
var
  CheckListBox: TNewCheckListBox;

function RegisterExtension(Ext: string): Boolean;
var
  I: Integer;
begin
  I := 0;
  Result := True;
  if (Ext = 'jpg') and CheckListBox.Checked[I] then Exit;
  Inc(I); 
  if (Ext = 'gif') and CheckListBox.Checked[I] then Exit;
  Inc(I); 
  if (Ext = 'png') and CheckListBox.Checked[I] then Exit;
  Inc(I); 
  Result := False;
end;

procedure AddExtensionsToCheckListBox;
begin
  CheckListBox.AddCheckBox('jpg', '', 0, True, True, False, True, nil);
  CheckListBox.AddCheckBox('gif', '', 0, True, True, False, True, nil);
  CheckListBox.AddCheckBox('png', '', 0, True, True, False, True, nil);
end;

对于使用有些不同的方法在我写这个答案时,这些内容不可用:
[Code] 部分中的数组变量和动态访问 https://stackoverflow.com/q/73337820/850848

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

注册表部分的脚本功能 的相关文章

  • 将用户定义的命令行参数添加到/?窗户

    使用 Inno Setup 可以添加用户定义的命令行参数 当我使用 HELP命令中未列出用户定义的参数 如何将带有描述的命令添加到 HELP window Inno Setup 6 0 支持HelpTextNote message http
  • 准备卸载,就像 Inno Setup 中的准备安装页面一样

    我需要检查多个 exe 文件是否正在运行 通过安装程序安装 然后提示用户关闭它们 如果它们正在运行 如果没有则取消卸载过程 有没有办法在安装中为卸载程序提供类似 准备 页面之类的内容 或者我该如何实施这样的检查 甚至一个消息框也将是完美的
  • Inno Setup 仅卸载部分组件

    我有一个通用的应用程序 例如媒体播放器 用于安装在同一文件夹中的每个不同的零售产品 即 C 程序文件 myapp 并且不同的内容 例如电影 都安装在同一个文件夹中 C 程序文件 myapp 电影 对于每个单独的安装 单独的零售产品 我只是创
  • 安装程序启动时间长 - 在 wpWelcome 之前添加对话框?

    我使用 Inno Setup 创建的安装程序大小约为 850 MB 包含约 7000 个文件和 890 个文件夹 未压缩大小为 1 98 GB 当开始安装过程时 之后Windows UAC 对话框出现后 安装程序的图标为空Taskbar约
  • 安装到 USB 驱动器根目录时出现 Inno Setup 错误:“您必须输入带驱动器号的完整路径”

    我想知道如何修复此类错误 您必须输入带驱动器号的完整路径 例如 C APP 或以下形式的 UNC 路径 server share 每当我尝试强制 Inno Setup Compiler 5 5 5 u 将我的东西放入其中时 就会出现这种情况
  • 如何在 Inno Setup 中使用 GetVolumeInformation?

    我需要在使用 Inno Setup 创建的安装过程中获取驱动器号的卷序列号 我知道 DLL 函数可以导入到 Inno 中 但我对它还很陌生 并且在使其工作时遇到一些问题 我知道 kernel32 中的 GetVolumeInformatio
  • Inno Setup 选择一个目录来安装预定义集中的文件

    在这种情况下 我需要将文件安装到特定目录 但在不同的计算机上它可能位于不同的文件夹中 所以我需要检查哪个是正确的 例如 我有一个文件 需要将其安装在A文件夹或B文件夹或C文件夹 取决于计算机有A or B or C 所以我需要先检查一下计算
  • 如何在 Inno Setup 中为控件卷出设置动画

    我想在我的安装程序中制作控件滚动的动画 你可以看这个视频 https drive google com file d 1H0HKTPXg9BdYD4HQWqCWHlGSTIHlcJa view 您可以使用计时器来为控件设置动画 Code f
  • InnoSetup:不卸载更改的文件

    如何告诉 InnoSetup 不要卸载已被用户更改的 文本 文件 与 InnoSetup 安装的文件不同 或者可能更困难 在现有版本上安装新版本时 InnoSetup 应该询问用户是否覆盖更改的文件 但在纯粹卸载时 它应该在不询问的情况下卸
  • Inno Setup:如何根据代码更改语言文件

    我使用自己的语言文件 isl 而不是使用 Inno Setup 的默认语言文件 它允许我自定义一些消息 但现在 我想要每种语言文件有两个版本 一个用于首次安装 一个用于更新 但是 是否可以从代码中选择一个文件 如果是 该怎么做 也许有一些比
  • Inno-Setup:在消息框中使用自己的按钮文本

    良好的 GUI 设计中的常见做法是不使用是 否消息框 而是为按钮提供真实名称 例如保存或丢弃 我们如何在显示的消息框中实现这一点MsgBox在 InnoSetup 中 至少对于我们在代码部分中显示的那些 The MsgBox http ww
  • Inno Setup:允许用户只选择可以安装软件的驱动器?

    我可以允许用户只选择要安装软件的驱动器吗 例如 他们可以选择C or D drive C Software D Software 但用户不能指定任何其他内容 就像他们不能选择安装下面的软件一样Downloads or MyDocumnets
  • 在 Inno Setup 中单击“下一步”按钮时验证自定义页面上的数据

    我已经设法获得一个基本脚本来显示向导 使用CreateInputFilePage 供用户识别我用来更新 XML 文件中某些设置的文件位置 但是 我想对所选文件的输入进行一些基本检查 而不是简单地接受用户提供的任何内容 例如 如果用户在内容无
  • inno setup bmp图像出现在单个页面上

    我希望 bmp 图像出现在单个页面 selectadditionaltasks 上 但它出现在所有页面上 我究竟做错了什么 procedure LogoOnClick Sender TObject var ResCode Integer b
  • 安装后执行批处理文件,并在 Inno Setup 中“完成”页面之前的自定义页面上显示其输出

    A cmd使用此解决方案可以在 Inno Setup UI 中显示输出 Inno Setup 安装程序中的嵌入式 CMD 在自定义页面上显示命令输出 https stackoverflow com q 56910906 850848 我的问
  • 欢迎页面未显示,SelectDir 页面首先显示

    我正在尝试使用 Inno Setup 来制作安装程序 我想先显示欢迎页面 然后显示 SelectDir This is CurPageChanged示例代码 procedure CurPageChanged CurPageID intege
  • 使用 Inno Setup 更快地创建安装程序

    当我在大量文件 gt 2GB 上运行 Inno Setup 时 需要很长时间才能运行 我相信它把时间花在了压缩上 这应该是 CPU 限制的 但它只使用了几个 CPU 有没有办法将其分散到 许多 更多核心 具体来说 我正在处理这个提升发布存储
  • 在 Inno Setup 中使用 {AppVersion} 作为函数的参数

    所以我有一个正在更新一些 XML 的函数 我想传递 AppVersion 已设置在 Setup 脚本的一部分作为该函数的常量 我努力了 MyFunction ExpandConstants AppVersion 但这给了我一个错误 如何正确
  • Inno Setup:使用缩进保存 XML 文档

    我正在尝试在 Inno Setup 中向 XML 文件添加一个新节点 节点添加正确 但下一个标记之前的换行符被删除或未添加换行符 这是我的添加节点代码 NewNode XMLDoc createElement Test XMLDoc set
  • Inno Setup:有条件地删除用户主文件夹中的非空目录

    我正在通过 Inno Setup 为我的 Windows 应用程序创建安装程序 应用程序本身将一些配置数据写入用户主文件夹及其自己的子目录中 现在 在卸载过程中 我希望允许用户选择一个选项来删除该文件夹 该文件夹最初不是由 Inno Set

随机推荐

  • iOS + AVFoundation。相同手动曝光设置下的不同照片亮度

    我使用 AVFoundation 来拍照 问题是 即使曝光时间 ISO 和白平衡设置恒定 我也会得到不同亮度的照片 手电筒 闪光灯和所有可能的稳定功能均被禁用 此问题也出现在介绍如何使用相机的标准 Apple 应用程序中 https dev
  • 可变数量列表的交集

    我定义两个列表的交集如下 def intersect a b return list set a set b 对于三个参数 它看起来像 def intersect a b c return list set a set b set c 我可
  • 如何在 Windows 中从 python 3.7 降级到 3.6

    我正在尝试安装tensorflow 但python 3 7不支持它 所以我想在不使用anaconda的情况下获得python 3 6 那么有什么建议吗 我已经这样做过很多次了 我的第一个技巧是使用虚拟环境 https realpython
  • 从命令列表中调用 shell 命令,直到所有命令都完成

    我有我想要调用的 shell 命令列表 最多可同时运行四个进程 我的基本想法是将命令发送到 shell 直到 4 个命令处于活动状态 然后 该脚本通过查找公共字符串 例如 不断检查所有进程的进程计数 nohup scrapy 抓取 urlM
  • 是否可以使 Node 不需要“.js”扩展名进行导入?

    Node 现在内置了对导入的支持 这非常棒 但该支持要求您指定文件扩展名 这很烦人 我确信这是有道理的 可能与他们对 mjs扩展 但是有什么方法可以解决它并使import 像平常一样 工作 你可以离开 js off 您可以通过设置来实现这一
  • Docker compose postgresql 服务 - 在构建过程中无法创建用户和数据库?

    我已经在这上面浪费了一整天的时间 并且说我对本应简单的任务的不必要的复杂性没有留下深刻的印象 这是一种严重的轻描淡写 好吧 说完之后 我正在使用 docker machine docker compose postgresql 和 redi
  • 如何在 Oracle 中转义 regexp_replace?

    我正在为字符串创建一个小的replaceParam函数 并且希望能够转义替换 例如 G select regexp replace ABC ABC ABC XXX from dual leads to XXX XXX 但我希望能够逃脱替换
  • 为什么 boostuniform_int_distribution 采用闭范围(而不是半开范围,遵循常见的 C++ 用法)?

    标题说明了一切 甚至还有一个warning http www boost org doc libs 1 55 0 doc html boost random tutorial html在文档页面中 警告 与常见的 C 用法相反uniform
  • 打开 AVD 管理器时出错

    在模拟器上运行代码时 我遇到了常见问题 控制台消息是 2013 01 05 19 39 15 Doodlz Android Launch 2013 01 05 19 39 15 Doodlz adb is running normally
  • 如何将动画 GIF 写入 iOS 相机胶卷?

    如何将动画 GIF 写入 iOS 相机胶卷 我知道照片库应用程序无法播放动画 但例如我应该能够在发送电子邮件等时导入它 我试过了 UIImageWriteToSavedPhotosAlbum UIImage imageWithData se
  • 更改列表项选择的视图属性

    我有一个包含自定义行的 ListView 此自定义行具有以下 UI 元素 图像视图图像视图1 图像视图2 文本视图文本视图1 文本视图2 文本视图3 要求是每当选择列表行时都会发生以下更改 imageView1背景 颜色改变 imageVi
  • 重置到 Git 中的第一个提交?

    有没有什么相当于 root标志在rebase命令为reset命令 git reset root 假设我想重置到当前分支中的第一个提交 我是否必须手动挖掘历史记录并找到该提交的哈希值 或者是否有一种简单的方法来重置到第一个可用的提交 根提交
  • Xcode 是否有更好的更新系统?

    Xcode 4 0 1 几天前发布了 这意味着我再次下载 4 5 GB 的野兽来更新 有谁知道苹果是否计划推出更好的更新系统 这些天我在等待洪流 不像下载到 80 却失去连接那么令人沮丧
  • Laravel Composer 安装出现错误“您的锁定文件不包含兼容的软件包集,请运行 Composer update”

    我编写 Laravel 代码已经有一段时间了 目前 我尝试从 github 克隆一个项目并在本地进行编辑 我在项目目录中安装了 Composer 但未包含供应商文件夹 我尝试运行composer install但我给了我这个错误 Your
  • gitlab - 使用 access_token 推送到存储库

    我实现了 oauth2 Web 流程 以便从我的应用程序的用户获取 access token 使用 access token 我想执行以下操作 获取用户信息 为该用户创建一个存储库 将代码推送到此存储库 使用 git push 我已经成功获
  • 变量中缀到前缀到后缀

    我在互联网上搜索了一个很好的实现 将变量表达式从中缀表示法转换为前缀和后缀 而不是数字表达式 我所做的所有搜索都没有成功 基本上我想看看 PHP 中是否有任何实现 这样我可以修改它以支持更多运算符 而不仅仅是 例如转换 a b c p c
  • java泛型通配符

    我对 Java 泛型类型中通配符的使用有疑问 它们之间的基本区别是什么 List
  • openCV 滤波器图像 - 用局部最大值替换内核

    关于我的问题的一些详细信息 我正在尝试在 openCV 中实现角点检测器 另一种内置算法 Canny Harris 等 我有一个充满响应值的矩阵 最大响应值为 检测到角点的最大概率为 我有一个问题 在一个点的附近检测到很少的角 但只有一个
  • 将所有列表值合并到地图中[重复]

    这个问题在这里已经有答案了 我想将地图转换为 Map
  • 注册表部分的脚本功能

    我们的软件支持一系列 70 文件关联 用户可以选择与我们的应用程序关联 直接在Registry安装程序部分并使用标志来控制卸载期间的行为以及Check标志来控制是否应将其写入注册表 用户可以通过自定义页面控制要设置的关联CheckListB