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

时间:2017-02-09 18:46:21

标签: c# .net windows

考虑以下情况 -

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

以下两个相关答案可以帮助您:

Finding installed applications

Finding UpgradeCode

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

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

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

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