【发布时间】:2013-01-11 22:31:45
【问题描述】:
似乎以前有一个 extension for MMC in Wix2 建议 xmlns http://schemas.microsoft.com/wix/MmcExtension - 尝试读取此 URL 会导致当前页面出现错误。
我似乎找不到 Wix3.6 的等价物,这是故意(重新)移动,还是只是丢失了?
【问题讨论】:
-
非常好的问题 - 我想自己知道答案
似乎以前有一个 extension for MMC in Wix2 建议 xmlns http://schemas.microsoft.com/wix/MmcExtension - 尝试读取此 URL 会导致当前页面出现错误。
我似乎找不到 Wix3.6 的等价物,这是故意(重新)移动,还是只是丢失了?
【问题讨论】:
它已被删除,您必须手动创建注册表项。 This link 很好地总结了您需要做的事情。
旧扩展只是上面链接中包含的代码的包装。我不知道他们为什么把它拿出来。
【讨论】:
您也可以使用 heat 工具(您可以在 wix bin/ 目录中找到它)。 使用很简单,只需要导出 installutil 生成的注册表项并启动命令即可:
heat reg <your_exported_registry> -o <output_filename>
【讨论】:
相关信息:
生成注册表项后,我们的 MMC 管理单元的更大问题是它扩展了 AD 用户和计算机管理单元 - 特别是扩展了其他目录对象类型的节点类型。
我曾希望这样的 wix 扩展能够涵盖这些,但它不在早期版本中。
在等待 Microsoft 解决过度保护 ADUAC、SMADUAC 和 GPO 等的 Windows 文件/注册表保护问题时,我们的客户已要求我们解决此问题。
使用自定义操作,我们从 WRP TrustedInstaller 获得所有权,并授予 Adminstrators 组访问权限以修改 NodeType 密钥,以便可以添加其他密钥。
函数最初源自 MSDN 示例
SetPrivilege Example Code
Taking Ownership Example Code
Modify ACL Example Code - 已调整 获取所有权以扩展 ACL,而不是创建新的 ACL 和爆炸旧的
还有一些注意事项:
Pre Win7 - 获取所有权的替代方法是使用 SE_RESTORE_NAME 来允许直接更改 ACL,但是 Win7 的安装程序进程故意阻止它,这也阻止了获取所有权能够恢复原始所有者。
平台类型:SetNamedSecurityInfo 不允许针对 64 位注册表执行 32 位 - Windows 8 中仍然存在 Windows 操作系统限制 但是,它确实允许 64 位执行来处理 64 和 wow6432 部分。 对于二进制自定义操作,至少需要一个特定于平台的 dll。
【讨论】: