Registry 表

Registry 表包含应用程序需要在系统注册表中设置的注册表信息。

Registry 表包含以下列。

类型 密钥 Nullable
注册表 Identifier Y N
Root 整数 N N
密钥 RegPath N N
名称 Formatted N Y
“值” 格式化 N Y
Component_ Identifier N N

 

Registry

用于标识注册表记录的主键。

Root

注册表值的预定义根注册表项。 在此字段中输入值 -1,以便根注册表项依赖于安装类型。 在下表中输入其他某个值,在特定根注册表项下强制写入注册表值。

常数 十六进制 十进制 根注册表项
(无) - 0x001 -1 如果这是每用户安装,注册表值会写入 HKEY_CURRENT_USER。 如果这是每计算机安装,注册表值会写入 HKEY_LOCAL_MACHINE。 请注意,通过将 ALLUSERS 属性设置为 1 来指定每计算机安装。
msidbRegistryRootClassesRoot 0x000 0 HKEY_CLASSES_ROOT:在每用户安装上下文中的安装期间,安装程序会在 HKCU\Software\Classes 配置单元中写入或移除该值。
在每计算机安装期间,安装程序会在 HKLM\Software\Classes 配置单元中写入或移除该值。
msidbRegistryRootCurrentUser 0x001 1 HKEY_CURRENT_USER
msidbRegistryRootLocalMachine 为 0x002 2 HKEY_LOCAL_MACHINE
msidbRegistryRootUsers 0x003 3 HKEY_USERS

 

请注意,如果注册表项写入 HKCU 配置单元,则建议这些注册表项引用在 Component 表的 Attributes 列中设置了 RegistryKeyPath 位的组件。 这可确保当同一台计算机上有多名用户时,安装程序会写入必要的注册表项。

Key

注册表值的可本地化注册表项。

Name

此列包含注册表值名称(可本地化)。 如果为 Null,输入到 Value 列的数据将写入默认注册表项。

如果 Value 列为 Null,Name 列在下表中显示的字符串具有特殊意义。

String 含义
+ 安装组件时,将创建注册表项(如果不存在)。
- 卸载组件时,将删除此注册表项(如果存在)及其所有值和子项。
* 安装组件时,将创建注册表项(如果不存在)。 此外,卸载组件时,将删除此注册表项(如果存在)及其所有值和子项。

 

请注意,如果在安装组件时要删除已安装的注册表项及其值和子项,必须使用 RemoveRegistry 表

Value

此列是可本地化的注册表值。 该字段为 Formatted。 如果值附加到下列前缀之一(即 #%value),该值的解释如表中所示。 请注意,每个前缀都以数字符号 (#) 开头。 如果值以两个或多个连续数字符号 (#) 开头,会忽略第一个 # ,并将值解释且存储为字符串。

前缀 含义
#x 将值解释并存储为十六进制值 (REG_BINARY)。
#% 将值解释并存储为可扩展字符串 (REG_EXPAND_SZ)。
# 将值解释并存储为整数 (REG_DWORD)。

 

  • 如果值包含序列波形符 [~],则将值解释为以 Null 分隔的字符串列表 (REG_MULTI_SZ)。 例如,若要指定包含三个字符串 a、b 和 c 的列表,请使用“a[~]b[~]c”。
  • 值中的序列 [~] 将各个字符串分隔开,该符号解释并存储为 Null 字符。
  • 如果 [~] 在字符串列表的前面,会将字符串追加到任何现有的注册表值字符串中。 如果注册表值中已出现追加字符串,会移除该字符串的原始匹配项。
  • 如果 [~] 在字符串列表末尾后面,会将字符串放在任何现有注册表值字符串的前面。 如果注册表值中已出现预置字符串,会移除该字符串的原始匹配项。
  • 如果 [~] 同时位于字符串列表的开头和末尾,或者不在开头也不在末尾,字符串将替换任何现有的注册表值字符串。
  • 否则,将值解释并存储为字符串 (REG_SZ)。

Component_

Component 表的第一列的外部键,它引用的组件控制了注册表值的安装。

备注

序列表中的 WriteRegistryValuesRemoveRegistryValues 操作将处理此表中的信息。 若要了解如何使用序列表,请参阅使用序列表

当选择在本地安装或从源运行相应的组件时,注册表信息将写入系统注册表。

请注意,安装程序在移除注册表项下的最后一个值或子项后会移除该注册表项。 若要防止在卸载时移除空的注册表项,请在需要保留的注册表项下写入一个虚拟值,并在 Name 列中输入 +。 如果 Name 列中显示 *,那么在移除组件时,会删除该注册表项及其所有的值和子项。

可在安装、卸载或修复事务期间使用自定义操作向 Registry 表添加行。 这些行不会持久性保留在 Registry 表中,并且信息仅在当前事务期间可用。 因此,必须在需要这些附加行中的信息的每个安装、卸载或修复事务中都运行自定义操作。 在操作序列中,自定义操作必须先于 RemoveRegistryValuesWriteRegistryValues 操作。

若要了解如何保护注册表项,请查看 MsiLockPermissionsEx 表LockPermissions 表

验证

ICE02
ICE03
ICE06
ICE32
ICE38
ICE43
ICE46
ICE49
ICE53
ICE55
ICE57
ICE70
ICE80