首页 > 解决方案 > 在 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: HKCRofc):

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部分

标签: registryinno-setup

解决方案


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

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

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

如果您需要更改所有者,同时保留内容,则必须为此运行外部工具。就像 PowerShell 代码:
如何通过 PowerShell 获取注册表项的所有权?


推荐阅读