在 Inno Setup 中取得注册表项的所有权

问题描述

我正在尝试通过安装程序获得此密钥的所有权(以自动化工作):

Computer\HKEY_CLASSES_ROOT\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}

认情况下,所有者是 TrustedInstaller。我无法通过 HKCU 执行此操作,因为更改应该适用于所有用户(将 RunAs 更改为 _RunAs)。

我使用命令(或 Root: HKCR ofc):

Root: HKLM; Subkey: "Software\Classes\AppID{{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}"; ValueType: string; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\AppID\{{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}"; ValueName: "RunAS"; Flags: deletevalue
Root: HKLM; Subkey: "Software\Classes\AppID\{{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}"; ValueType: string; ValueName: "_RunAS"; ValueData: "Interactive User"
Root: HKLM; Subkey: "Software\Classes\AppID\{{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}"; ValueType: dword ; ValueName: "AppIDFlags"; ValueData: "1"

不幸的是没有任何反应,在另一台计算机上,我在运行此命令后手动将所有者设置为“用户”,仅添加了权限,但不幸的是所有者保持不变。当然,我以管理员权限运行所有内容,并且已阅读全文 Registry section

解决方法

Inno Setup 无法更改密钥的所有者。

但是您可以要求 Inno Setup 使用 deletekey flag 重新创建密钥。什么应该将所有者更改为运行安装程序的帐户作为副作用。但它显然也会删除所有子键和值。

[Registry]
Root: HKLM; Subkey: "Software\Classes\AppID{{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}"; \
  Flags: deletekey

如果您需要更改所有者,同时保留内容,则必须为此运行外部工具。就像 PowerShell 代码:
How do I take ownership of a registry key via PowerShell?