我试图了解 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 安装程序包的包装器。
我将在下面添加一些链接,指向有关各种类型的设置以及处理设置时所涉及的任务(例如文件提取)的信息。
一些链接:
- 从 EXE 中提取 MSI(还有很多其他链接)
- 最常用的部署工具的简单列表视图(适用于 Windows 安装程序)
- 更全面的部署工具链接列表(所有种类)
- 如何找到已安装的 MSI 设置的产品 GUID?
- 不使用 msiexec 从命令行卸载 MSI 文件
这些答案中还嵌入了许多其他指向类似内容的链接。
答案2
当开发人员创建应用程序时,他们通常会选择一种方法来安装它。一种流行的选择是使用 Windows Installer,从而创建 MSI。MSI 文件本质上是一个数据库,它告诉 Windows Installer 如何安装软件,即要删除的文件、要创建的注册表项、要创建的服务等。用于编写 MSI 文件的流行工具有威克斯或者安装Shield。
作为编写 MSI 的一部分,应为产品分配一个唯一的 GUID,称为 ProductCode。这是您在 Uninstall 键下看到的产品代码。UninstallString 值使用 ProductCode,因为 Windows Installer 可以使用它通过 /X 开关卸载应用程序。
开发人员可以选择不使用 Windows Installer,而是编写自己的安装程序。但是,要使其出现在“程序和功能”中,开发人员需要手动为应用程序创建卸载键。他们至少需要设置 DisplayName 和 UninstallString(參考)。他们不太可能创建 GUID 来识别应用程序,但他们可以。
如果开发人员创建了自定义安装程序,那么开发人员还需要提供一些方法来卸载应用程序。因此,大多数开发人员会创建一个单独的卸载应用程序,该应用程序由 UninstallString 指向。此应用程序还可用于提供修改、修复或卸载应用程序的选项。
这确实是开发人员的偏好。