gpt4 book ai didi

c# - 使用 MsiGetProductInfo 检查是否安装了 Microsoft Word

转载 作者:行者123 更新时间:2023-11-30 01:10:27 25 4
gpt4 key购买 nike

我的电脑上安装了 Microsoft Office 2013。我正在尝试使用 MsiGetProductInfo查询有关该产品的信息(实际上我需要检查是否安装了 Word)。

但以下 C++ 代码总是返回错误 1605 (ERROR_UNKNOWN_PRODUCT) 这意味着该产品似乎未安装,尽管它存在于列表中安装的应用程序。

TCHAR szVersion[20];
DWORD cchVersion = 20;
LSTATUS st = MsiGetProductInfo(TEXT("{000209FF-0000-0000-C000-000000000046}"), INSTALLPROPERTY_VERSIONSTRING, szVersion, &cchVersion);

ClassID {000209FF-0000-0000-C000-000000000046}HKLM\Software\Classes\Word.Application\CLSID 的注册表中找到,我想它应保留 Microsoft Word 应用程序 CLSID

如何正确使用 MsiGetProductInfo 来检查是否安装了 MS Word?

最佳答案

MsiGetProductInfo 采用产品代码,而不是 CLSID,因此这种方法不起作用。如果您知道 Microsoft Office 使用的所有产品代码(我听说他们有数百个 SKU,这可能意味着数百或产品代码),您可以按顺序搜索它们。但是,除非他们只有几个产品代码,并且不添加新代码(或者您不支持新版本),否则这不会扩展。

您可能最好跟踪 Word.Application 类的注册表足迹回到 COM 服务器,以及该文件的版本 block 。或者,假设它是由 MSI 安装的,您可以尝试使用 MsiEnumComponentsEx跟踪文件到其安装组件,以及 MsiEnumClientsEx找到安装该组件的产品。从那里你可以返回到 MsiGetProductInfo .

请注意,这仅适用于通过 MSI 安装产品并在注册表中留下足迹的情况。很难确定 future 的版本是否会遵循这种方法。显然并非所有现有产品都通过 MSI 安装:Can't find installed Office 2013 Home and business with MsiEnumProducts .

关于c# - 使用 MsiGetProductInfo 检查是否安装了 Microsoft Word,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37587876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com