使用Wix安装程序创建注册表键

3

我对wix不熟悉,但是我需要在项目中使用它。我需要禁用用户更改密码的功能。为了实现这一点,我想添加/更改注册表项,但这并不起作用:

<DirectoryRef Id="TARGETDIR">
    <Component Id="RegistryEntries" Guid="*">
        <RegistryKey Root="HKCU"
                     Key="Software\Microsoft\Windows\CurrentVersion\Policies\System"> 
            <RegistryValue Type="integer" Name="DisablePW" Value="1" KeyPath="yes"/>
            <RegistryValue Type="string" Value="Default Value"/>
        </RegistryKey>
    </Component>
</DirectoryRef>

在“策略”下还没有“系统”键,所以我认为这将会创建一个。

2个回答

1

您绝对不应该写入这样一个关键且受政策控制的Windows注册表键。

我猜域控制器会通过组策略恢复这些设置:

...默认情况下,Microsoft Windows每90分钟刷新其策略设置,并具有随机30分钟的偏移量

在登录脚本或其他管理功能中也可能重置设置。

这不是解决方案 - 您的应用程序需要重新设计。为什么您需要禁用用户更改密码的能力呢?这样做真的很不好。不能干扰Software\Microsoft\Windows\CurrentVersion\Policies\下的任何设置。


我不介意Wix改变组策略。背景很简单:这将是一个演示应用程序,应在测试机上运行,而该测试机将由随机数量的人使用。因此,我需要尽可能地限制一切。如果每个用户都可以使用ctrl+alt+del和任务管理器、更改密码等来退出演示应用程序,会发生什么?是的,本质上我的应用程序就是一个大病毒。 - sceiler
感谢您的建议。不幸的是,这样做不会起作用,因为我自己也受到限制。无论我是否应该干涉注册表或组策略,您能否指出我的错误,以及在使用WiX添加/更改注册表值方面的问题? - sceiler
除了在业主背后更改系统策略的问题之外,实际问题是如果管理员注意到并更改了此更改,则您的安装将损坏。它会提示安装源并尝试将其修复为您的设置。此时,任何合理的管理员都会认为您的产品比应用程序更像病毒或安全漏洞。如果应用程序需要更改才能运行,请记录它们并告知用户该怎么做。 - PhilDW
我很感谢你的意见,但这些变化“在用户背后”有足够合理的原因。想想商店展示的演示电脑就知道了。 - sceiler
在我的测试电脑上,Windows 从未恢复此设置或将其重置回原始状态。此外,在通过控制面板卸载后,一切都恢复到原始状态。 :) - sceiler
显示剩余4条评论

0
永远不要忘记在功能标签之间添加组件ID。否则它不会被包含在安装程序中。
<Feature Id="DefaultFeature" Level="1">
         <ComponentRef Id="RegistryEntries"/>
</Feature>

附注:在我的看法和其他在SO上的答案中,Wix应该只处理添加全新的注册表值(在安装之前不存在的),因为在卸载时它们将被删除。如果您想修改或删除注册表条目,请确保使用自定义操作(脚本、程序、批处理、.reg等)来回滚这些更改。


只在HKLM中设置适用于整个应用程序的“只读”注册表键(典型示例:许可证密钥、选择的安装目录、共享服务器名称和端口设置等...)或者将HKLM中的值设置为模板值,您的应用程序会在每个用户启动时将其复制到HKCU中。不要使用MSI向HKCU写入任何值。这是多年部署经验中最好的建议。 - Stein Åsmul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接