c# – 是否有正确的方法来检查计算机上是否安装了特定的Microsoft应用程序?

考虑以下情况 –

假设您正在编写需要使用特定Windows应用程序的应用程序.具体来说,它是一个安装各种API工具的应用程序,旨在将应用程序集成到其他一些Microsoft软件或服务中.

现在,让我们做一些其他的假设,如下:

>您的应用程序不关心安装此工具的哪个版本,因为版本更改往往只是修复错误的小更新,或者是使组件在不同版本的Windows上正确安装的补丁.
>您正在编写一个国际工具,因此您可能需要在最终用户计算机上安装所需的Microsoft组件工具,但它可以以非英文名称安装.
>此外,您的应用程序在zip文件中分发.您的用户未安装您的软件,因此您无法创建安装程序的必备软件.相反,您必须运行您的应用程序,然后检查是否已安装所需的Microsoft工具.

使用C#,是否有标准化的方法来检查是否已安装应用程序.具体来说,是否有一些WMI调用或注册表查询在执行时返回某种形式的唯一标识符,该标识符旨在表示唯一表示已安装应用程序的值,而不管应用程序的安装名称或版本如何?

关于检查已安装软件,我可以找到关于SO或网络上其他地方的每个问题,建议通过查找名称查看软件是否已安装.这可行,但是,我们的软件是一个全球工具,用于具有各种文化设置的机器上.我们发现,即使在我们提供安装文件之后,这种天真的检查也不起作用,因为Microsoft Installer中的本地化设置正在为不同的非英语语言环境设置的计算机上重命名应用程序.

这个问题有“正式”的解决方案吗?如果您正在检查的特定工具的开发人员是否已正确设置其安装程序以正确配置这些ID值,那么是否存在关于如何检查此类软件的文档化方法?

另外,我们实际上需要检查几个Microsoft工具.我不想列出一个清单,因为我希望有一种适度的直接方法来解决这种对多种不同工具的需求.

最佳答案 以下是两个相关的答案,可以帮助您:

Finding installed applications

Finding UpgradeCode

基本上,您需要了解两个GUID值:ProductCode和UpgradeCode.

ProductCode标识所使用的确切安装包,并且对于每个构建应该完全不同(假设安装程序已正确编程).

UpgradeCode识别整个产品本身,不应在版本之间进行更改(同样,假设安装程序已正确编程).这是您需要寻找的.

您可能想要检查的一件事是开发人员是否对产品的不同语言版本使用了不同的UpgradeCodes.

点赞