从评论更改为答案以获得更好的可读性,并将事实讨论更改为您的问题和相关环境:
首先让我们看看你关于更改DisplayVersion in 值的建议
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{MSI ProductCode}
对于 32 位 MSI 设置(大多数设置仍然在这里运行,即使包含 64 位或独立(例如 .NET)代码,但这是另一回事)或
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{MSI ProductCode}
适用于 64 位 MSI 设置。首先,这只是机器范围(“LOCAL_MACHINE”)设置的地方,而不是依赖于用户的设置,但没关系,因为这是标准的。
编辑 DisplayVersion 不是最佳做法。至少,如果要对其进行编辑,它可以进行讨论。事实上,它是一个免费的字符串,许多安装程序都在使用它,它们的版本不是“1.0”,而是“V1.0”或“1.0a”或类似的。
如果这样做,那么在 msi 本身的自定义操作中(在最后)中这样做是最糟糕的。
至少,作为反对那些禁止更改此密钥的人的论据:这不是 MSI 与版本进行逻辑操作的地方,此版本不用于版本比较。实际上它只是一个输出字符串。
OTOH,它可以被原始设置 (MSI) 修复/更新/重新安装再次覆盖。所以警告不要手动更改有背景。
另外:
有些 Windows 版本,尤其是较旧的版本,存在更新问题,因此更改注册表值不会立即反映控制面板视图。例如,有一个 ARP 缓存保存所有安装条目。我不认为 Windows 7 或更高版本会出现这些问题,但是在过去看到问题并且知道 ARP 缓存仍然存在让我在这里保持谨慎。
我建议并且我称之为好的做法是不要更改此编号,而是让它属于本机 MSI。
Instad 使 MSI 设置对控制面板中的用户不可见(“程序和功能”或 ARP 由于它的名称较旧,我们仍然在 MSI 和设置社区中这样称呼它):
将您的 MSI 修复程序中的 ARPSYSTEMCOMPONENT 属性设置为 1(通常是十六进制 1,但因为是您,所以您只能选择十进制 1 :-))。
或者在安装时将ARPSYSTEMCOMPONENT=1 作为命令行参数提供给您想要的任何 MSI 设置。
事实上,这也是微软对 SQL Server、Visual Studio、Office 设置所做的事情。它们由多个设置组成,其行为类似于不可见的(设置)组件。
或者,您可以使(任何)MSI 设置在安装后“不可见”:只需将注册表中的注册表值 SystemComponent(或添加)直接更改为 1 即可。
但这又不是干净的,因为修复或更新或重新安装可能会再次改变这一点。但它不会破坏任何东西——在最坏的情况下,不可见的设置会变得可见。
然后您为可视 ARP 设置构建另一个设置(可能是“主”设置),或者您只需在注册表中的上述“卸载”键下创建一个完整的 MSI 独立键。 (在程序或“正常”MSI 设置中)。这可以是 GUID 或普通名称。查看您的注册表,您会在那里找到一些非 GUID 的示例,例如由 Adobe 等提供。每个非 GUID 都不是“Windows Installer”(MSI)设置,但当然也有一些类似 GUID 的条目可以通过非 MSI 设置。
主要优点是:这个新的DisplayVersion在MSI-independent key可以自己控制。