gpt4 book ai didi

wix - Windows 应用程序注册表设置和指南

转载 作者:行者123 更新时间:2023-12-02 17:15:02 25 4
gpt4 key购买 nike

由于我一直在学习 WiX 来编写安装程序,因此我从文档和教程中学到了很多如何在安装期间设置程序以及设置或读取注册表值的知识。但是,上述文档和教程中的注册表设置没有解释此类设置的要求。

作为一个具体示例,我有一个用于简单应用程序的 WiX 安装程序,其中 InstallScope 设置为 perMachine。我想在我的 WiX 安装程序中添加一个“注册用户”对话框。我找到了一个允许用户输入他们的姓名、组织和注册 key 的示例。这些设置为 WiX 预定义属性:分别为 USERNAME、COMPANYNAME 和 PIDKEY。验证这些后,WiX 会在后台将它们写入以下注册表文件夹:

HKLM > Software > Microsoft > Windows > CurrentVersion > Installer > UserData > S-1-5-18 > Products > {GUID} > InstallProperties

我一直在做大量研究,试图找到以下问题的答案,但未能找到答案。

  1. 安装最简单的 Windows 应用程序时需要设置哪些注册表项的最低要求(或至少最低 Microsoft 指南)是什么?我知道这在某种程度上取决于安装是针对所有用户(机器)还是特定用户,因此会有两个不同的答案。

  2. 简单的应用程序信息应该保存在注册表中的标准位置在哪里?

  3. 为了满足 #1 的指导方针/要求,WiX 总是在幕后创建哪些注册表设置,而没有明确的 XML 条目来使它们发生?

  4. 一旦设置了某些注册表项,如上例所示,应用程序如何使用注册表 API 正确定位它们?具体来说,例如,如果一旦安装,我希望我的应用程序能够读取注册用户信息,它是否真的必须知道并打开整个 key ,如上所示,或者是否有一个 Windows API 调用来处理其中的一部分?

我确实在 MSDN 中的一篇标题为 Application Registration 的文章中找到了一些看起来很有前途的信息。 ,但我无法将那篇文章的细节与 WiX 对安装注册表所做的关联起来。具体来说,例如,他们建议使用 HKEY_LOCAL_MACHINE 或 HKEY_CURRENT_USER > SOFTWARE > Microsoft > Windows > CurrentVersion > App Paths > ... 但在我的系统(运行 Windows 10)上,该 key 甚至不存在。所以其他应用程序甚至没有使用它。这又回到了我的问题 #1。

最佳答案

那些“WiX 预定义属性:USERNAME、COMPANYNAME 和 PIDKEY”实际上是 Windows Installer 属性,在 MSDN 中有文档,例如 PIDKEY:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370826(v=vs.85).aspx

我没有看到与它们相关的问题,但作为 Windows Installer 属性,它们旨在在安装期间使用。将用户名写入注册表这一事实是文档的一个实现细节:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa372385(v=vs.85).aspx

声明如果它没有自动设置,它将使用之前保存的值。

WiX 生成用于安装的 MSI 文件,因此它的许多属性和数据项直接转换为 MSI 文件或 Windows Installer 属性中的内容。大多数与 Windows Installer 的标准和最佳实践有关的信息都在这里:

https://msdn.microsoft.com/en-gb/library/bb204770.aspx

作为“Windows Installer 最佳实践”,它包含指向 Windows Installer Logo 要求的链接:

https://msdn.microsoft.com/en-gb/library/aa372825.aspx

所有这些都讨论了安装和应用程序的最佳实践,所以这实际上是对这部分问题的“仅链接”答案,因为那里有很多内容。

关于 #3,您可能指的是 Windows Installer,而不是 WiX。但无论哪种方式都是无关紧要的,因为它是实现细节。有 MSI API - 请参阅下面的评论。一个示例:如果 Windows 将有关所有安装程序组件的信息写入注册表,这并不重要,因为 MsiEnumComponents() 将枚举系统上的所有组件,MsiEnumClients() 将枚举拥有它们的产品,MsiGetComponentPath () 组件的安装位置, 等等。

从您的问题中不清楚“注册用户信息”是什么,除非您指的是 USERNAME。您想知道谁安装了该产品吗?如果是这样,USERNAME 不是最佳选择,因为它不必是用户帐户 - 它只是一个名称。一般来说,像这样的任何东西都有 API,不需要读取注册表。 MsiGetProductInfoEx() 将为您获取特定用户的产品信息。 MsiEnumProductsEx() 将枚举所有产品以及安装它们的用户。

PIDKEY 是未经验证的产品 ID,如文档所述。它成为 ProductID 属性,可以使用 MsiGetProductInfo(..ProductCode...,“ProductID”,...)从应用程序中检索,并且请注意您还获得了“RegCompany”和“RegOwner”,这是您引用的其他内容。

关于wix - Windows 应用程序注册表设置和指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46828400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com