使用 Inno Setup 将自定义字符串值写入 SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Write custom string value into SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall with Inno Setup

在安装过程中,我想将自定义字符串值写入自动创建的注册表项 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyApp.2020_is1

我试图在我的 iss 脚本的 [Registry] 部分执行此操作,但它似乎被忽略了。

Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}.{#MyAppVersion}_is1"; ValueData: "some tag"; Flags: uninsdeletekey; ValueType: string; ValueName: "CustomTag"

这通常是不鼓励的,还是我遗漏了一些特别的东西? [Setup] 部分确实有 PrivilegesRequired=admin

可以并排安装我的应用程序的多个版本,我想让用户可以添加描述性标签,这样他们不仅可以通过版本号还可以通过标签来识别版本.

无论如何,当我在注册表中搜索以前的版本时,我试图将自定义值添加到卸载键中,而不必引用另一个键来查找自定义标签。

Uninstall 条目是作为安装的最后步骤之一创建的。所以也在 [Registry] 部分被处理之后。检查 Installation order。创建条目后,其之前的内容将被完全删除,包括您的 some tag 值。

正如@Bill_Stewart 已经评论的那样,正确的方法是使用 SetPreviousData/GetPreviousData.

如果您真的想使用自己的自定义代码来编写条目,则必须从 CurStepChanged(ssPostInstall) event 中的 Pascal 脚本执行(在创建 Uninstall 条目后触发)。


如果要让用户区分安装,标签必须去AppName or AppVerName or UninstallDisplayName

如果您需要允许并行安装,则安装必须具有不同的 AppId – 这是卸载程序密钥名称的一部分,因此不需要额外的标签。