首页 > 解决方案 > WiX 安装程序添加注册表项的问题

问题描述

我想使用 WiX 安装程序添加一些注册表。这是我的代码:

<DirectoryRef Id="TARGETDIR">
  <Component Id="DisableWeakCipherSuites" Guid="7DBE2D50-3C00-4CEF-86CC-897C0C96E7FF" KeyPath="yes">
    <RegistryKey Key="SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 40/128" Root="HKLM" Action="createAndRemoveOnUninstall">
      <RegistryValue Name="Enabled" Value="0" Type="integer" />
    </RegistryKey>
    <RegistryKey Key="SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\Triple DES 168" Root="HKLM" Action="createAndRemoveOnUninstall">
      <RegistryValue Name="Enabled" Value="0" Type="integer" />
    </RegistryKey>
    <RegistryKey Key="SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128" Root="HKLM" Action="createAndRemoveOnUninstall">
      <RegistryValue Name="Enabled" Value="0" Type="integer" />
    </RegistryKey>
    <RegistryKey Key="SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 56/128" Root="HKLM" Action="createAndRemoveOnUninstall">
      <RegistryValue Name="Enabled" Value="0" Type="integer" />
    </RegistryKey>
  </Component>
</DirectoryRef>

但不是将这些键添加到 CurrentControlSet 中,而是安装程序将这些键添加到 ControlSet001 中。

标签: wixregistryinstallation

解决方案


核心操作系统密钥:简要地看了这个——当然不是加密算法和协议方面的专家——我对使用 MSI 来做这个调整有点怀疑。由于不断变化OS protection features- 这很难预测,有时会发生变化 - 我不确定直接破解这些密钥是一个好主意 - 尽管有些文章指出它是可以的。如果可能,我会使用组策略来设置密钥


组件 GUID:使用 MSI 进行此类设置时还有一些挑战。关于为什么注册表设置包是危险的,我对 serverfault 有一个较旧的答案。主要问题是,一旦您将组件 GUID 指向某个关键路径(注册表或其他),您的 MSI 就会认为它“拥有该密钥”,并且会在卸载时将其撕掉。这可能是也可能不是您想要的。您需要意识到这一点,并在您的设计和测试中考虑到这一点。您可以将组件设置为永久以使其处于卸载状态,或者将组件设置为空白 GUID。

自定义操作:可以使用在系统上下文中提升的自定义操作写入这些键。我总是告诉人们尽可能避免自定义操作,但这个目的似乎是一个候选:它是一种新的并且不受工具支持(据我所知)。因此,它适合作为可以使用自定义操作执行的操作。在检查已经存在的内容或在卸载时进行更明智的更改方面,这也将产生更多的控制卸载和安装的操作。

请注意,自定义操作代码是complicated to testhard to debug并且具有challenges with impersonation(它运行的安全上下文),sequencing以及conditioning(当它运行时 - 在什么安装模式下:安装、修复、修改、卸载等...)。自定义动作很难做好。简单明了


推荐阅读