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

标签 c# .net windows

考虑以下场景--

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

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

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

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

我在 SO 或网络上其他地方找到的关于检查已安装软件的每个问题都建议通过按名称查找该软件是否已安装。这将工作,但是,我们的软件是一个全局性的工具,可以在具有不同文化背景的机器上使用。我们发现,即使在我们提供了安装文件之后,这种简单的检查也不起作用,因为 Microsoft Installer 中的本地化设置正在为不同的非英语区域设置的机器上的应用程序重命名。

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

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

最佳答案

以下是两个对您有帮助的相关答案:

Finding installed applications

Finding UpgradeCode

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

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

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

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

关于c# - 是否有正确的方法来检查计算机上是否安装了特定的 Microsoft 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42144582/

相关文章:

c# - 从 android_assets 文件夹动态加载 dll

c# - 在 ScatterViewItem 中将控制区与图像分离

c# - 如何在winform面板的边框上添加图像?

c# - 我可以为重写的方法调用 base 吗

C++ delete 在 Windows 中并不总是按预期工作

windows - Windows 中 diff 命令的等价物是什么?

c++ - 模板特化导致 Windows 上的 MinGW 链接错误,而不是 Linux 上的 GCC

c# - IndexOf() 与 Replace() 和零宽度非连接器

c# - Entity Framework 中有自动关联吗?

c# - Azure CloudBlockBlob.Exists() 方法始终返回 false