wix - 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 中。
解决方案
核心操作系统密钥:简要地看了这个——当然不是加密算法和协议方面的专家——我对使用 MSI 来做这个调整有点怀疑。由于不断变化
OS protection features
- 这很难预测,有时会发生变化 - 我不确定直接破解这些密钥是一个好主意 - 尽管有些文章指出它是可以的。如果可能,我会使用组策略来设置密钥?
组件 GUID:使用 MSI 进行此类设置时还有一些挑战。关于为什么注册表设置包是危险的,我对 serverfault 有一个较旧的答案。主要问题是,一旦您将组件 GUID 指向某个关键路径(注册表或其他),您的 MSI 就会认为它“拥有该密钥”,并且会在卸载时将其撕掉。这可能是也可能不是您想要的。您需要意识到这一点,并在您的设计和测试中考虑到这一点。您可以将组件设置为永久以使其处于卸载状态,或者将组件设置为空白 GUID。
自定义操作:可以使用在系统上下文中提升的自定义操作写入这些键。我总是告诉人们尽可能避免自定义操作,但这个目的似乎是一个候选:它是一种新的并且不受工具支持(据我所知)。因此,它适合作为可以使用自定义操作执行的操作。在检查已经存在的内容或在卸载时进行更明智的更改方面,这也将产生更多的控制卸载和安装的操作。
请注意,自定义操作代码是complicated to test
,hard to debug
并且具有challenges with impersonation
(它运行的安全上下文),sequencing
以及conditioning
(当它运行时 - 在什么安装模式下:安装、修复、修改、卸载等...)。自定义动作很难做好。简单明了。
推荐阅读
- r - R中的Stata选项卡命令的等效项
- arcore - 对于 ARCore TramsformableNode,Pinch getture 在第一时间不起作用
- java - Switch 声明(价格以 5 美分递增)
- android - 当 Admob 横幅位于软键盘后面且不可见时,谷歌是否付费?
- css - background-size before IE9
- xamarin.forms - 在滚动回视图之前,Listview 不会渲染 viewcell
- firebase - Firebase 控制台未在任何浏览器中加载
- python - 为什么我的列在 django_tables2 中不包含它们各自属性的类名?
- svg - Webpack QuillJS 输出 SVG 路径而不是内联它
- reactjs - 是否有任何类似于 EXPO 的应用程序,可用于在 ios 设备上运行 javascript 应用程序,而无需发布到应用商店?