c++ - 如何从MSI包中读取产品代码?

标签 c++ winapi windows-installer

我想在安装之前从msi文件中获取产品代码。如果我的计算机上已安装该产品的其他版本,则需要它来删除该产品的其他版本。我的意思是我想防止出现错误1638(“此产品的另一个版本已存在...”)并在我的代码中手动将其删除。我正在使用c++。
因此,我想从即将安装的msi文件中获取产品代码,并使用此产品代码删除该产品的现有版本并安装一个新版本。但是当我试图打开一个msi文件来使用它处理时MsiOpenPackage(msiPackagePath, &d_handle);我收到1638错误。因此,我无法打开msi文件,也无法从中获取产品代码。我的问题:是否可以通过不使用MsiOpenPackage打开产品的msi文件获取产品代码?先感谢您!

最佳答案

我的同事刚刚解决了一个问题。我们使用了函数MsiOpenPackageEx并传递了一个标记MSIOPENPACKAGEFLAGS_IGNOREMACHINESTATE来忽略计算机状态并返回一个句柄。

关于c++ - 如何从MSI包中读取产品代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62832938/

相关文章:

winapi - 如何以编程方式清除 MSIE/WinInet 缓存?

c++ - Windows 中套接字发送缓冲区的大小是多少?

c# - 使用头文件将 get/set 从 C# 转换为 C++

c++ - 在 while 循环中连接值出错

c++ - C++ multimap 容器是如何实现的?

c++ - 如何检查范围内的元素是否应该移动?

c++ - 是否有 WinAPI 可以从带有可选空格和其他参数的命令行获取文件名?

registry - 如何正确地将文件关联添加到 Windows 注册表?

windows - 为 Windows 7 开发 : deployment seems an issue

WIX - 使用 heat.exe 后 ComponentGroupRef 的条件