注册表中重复但不同的 Windows 卸载

注册表中重复但不同的 Windows 卸载

我试图了解 HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall 中 GUID 和非 GUID 键之间的区别。

有些东西有 GUID 键和非 GUID 键,UninstallStrings 有很大不同。例如,Autodesk Revit 在 GUID 键中有一个很好的 UninstallString

MsiExec.exe /X{7346B4A0-1900-0510-0000-705C0D862004})

但我认为,在非 GUID 键中,UninstallString 实际上是一个补丁字符串。

C:\Program Files\Autodesk\Revit 2019\Setup\Setup.exe /P {7346B4A0-1900-0510-0000-705C0D862004} /M RVT /LANG en-US)

但是其他的,比如 Autodesk Desktop App 没有 GUID 键,而非 GUID 键中的 UninstallString 是好的。

C:\Program Files (x86)\Autodesk\Autodesk Desktop App\removeAdAppMgr.exe

我想知道,这是正常现象吗,还是只有 Autodesk 才会做这种傻事?还有,有没有好的 Microsoft 资源详细说明各个卸载文件夹中需要哪些信息?到目前为止,我找不到任何详细信息。

编辑:同样,我发现微软也做了重复,但不是 GUID 与否。这里有三个不同的卸载,具有相同的 DisplayName,但引用了三个不同的 GUID。此外,这些都是 x64 安装,但在 WOW6432Node 中找到。令人沮丧。

Visual C++ 2008 - x64 (KB958357) - v9.0.30729.177
C:\Windows\SysWOW64\msiexec.exe /x {8CCEA24C-51AE-3B71-9092-7D0C44DDA2DF} /qb+ REBOOTPROMPT=""

Visual C++ 2008 - x64 (KB958357) - v9.0.30729.177
C:\Windows\SysWOW64\msiexec.exe /x {C3A57BB3-9AA6-3F6F-9395-6C062BDD5FC4} /qb+ REBOOTPROMPT=""

Visual C++ 2008 - x64 (KB958357) - v9.0.30729.177
C:\Windows\SysWOW64\msiexec.exe /x {F6F09DD8-F39B-3A16-ADB9-C9E6B56903F9} /qb+ REBOOTPROMPT=""

答案1

很好的答案已经发布了,我仍然会发布在你的问题被删除之前开始写的内容。

GUID钥匙通常Windows Installer setups(文件*.MSI扩展)是 Microsoft 在企业中大量使用的部署的老旧标准。

安装程序有很多种,但它们通常被包装为setup.exe文件或MSI files较新的安装程序格式,如APPX(已过时)、MSIX(新兴)等......确实有很多可能性。

欧特克看起来是使用setup.ex不基于的传统风格的 e 安装程序Windows Installer,尽管指向的仍有可能setup.exe是一个启动 Windows 安装程序包的包装器。

我将在下面添加一些链接,指向有关各种类型的设置以及处理设置时所涉及的任务(例如文件提取)的信息。


一些链接

这些答案中还嵌入了许多其他指向类似内容的链接。

答案2

当开发人员创建应用程序时,他们通常会选择一种方法来安装它。一种流行的选择是使用 Windows Installer,从而创建 MSI。MSI 文件本质上是一个数据库,它告诉 Windows Installer 如何安装软件,即要删除的文件、要创建的注册表项、要创建的服务等。用于编写 MSI 文件的流行工具有威克斯或者安装Shield

作为编写 MSI 的一部分,应为产品分配一个唯一的 GUID,称为 ProductCode。这是您在 Uninstall 键下看到的产品代码。UninstallString 值使用 ProductCode,因为 Windows Installer 可以使用它通过 /X 开关卸载应用程序。

开发人员可以选择不使用 Windows Installer,而是编写自己的安装程序。但是,要使其出现在“程序和功能”中,开发人员需要手动为应用程序创建卸载键。他们至少需要设置 DisplayName 和 UninstallString(參考)。他们不太可能创建 GUID 来识别应用程序,但他们可以。

如果开发人员创建了自定义安装程序,那么开发人员还需要提供一些方法来卸载应用程序。因此,大多数开发人员会创建一个单独的卸载应用程序,该应用程序由 UninstallString 指向。此应用程序还可用于提供修改、修复或卸载应用程序的选项。

这确实是开发人员的偏好。

相关内容