【发布时间】:2020-07-10 22:41:42
【问题描述】:
我想在安装之前从 msi 文件中获取产品代码。如果我的计算机上已经安装了其他版本的产品,我需要它来删除它。我的意思是我想防止出现错误 1638(“该产品的另一个版本已经存在......”)并在我的代码中手动删除它。我正在使用 C++。 因此,我想从即将安装的 msi 文件中获取产品代码,并使用此产品代码删除产品的现有版本并安装新版本。但是当我试图打开一个 msi 文件来获取它的句柄时使用
MsiOpenPackage(msiPackagePath, &d_handle);
我收到错误 1638。因此我无法打开 msi 文件,也无法从中获取产品代码。我的问题:是否可以从不使用MsiOpenPackage 打开的 msi 文件中获取产品代码?提前谢谢!
【问题讨论】:
-
重大升级一般通过升级代码实现。它应该在两个 MSI 版本之间匹配。您编写了 Upgrade table 并详细说明了您希望升级如何工作,然后通过内置 MSI 机制卸载以前的版本。 Find product code。 Find upgrade code。 Debugging failed major upgrades.
-
我有用于访问 MSI 的代码示例,但现在没有时间找到它。你真的需要吗?你为什么要通过C++?您是从应用程序调用安装吗?
标签: c++ winapi windows-installer