Как прочитать код продукта из пакета msi? - PullRequest
1 голос
/ 10 июля 2020

Я хочу получить код продукта из файла msi перед его установкой. Он мне нужен, чтобы удалить другую версию продукта, если она уже установлена ​​на моем компьютере. То есть я хочу предотвратить ошибку 1638 («Другая версия этого продукта уже существует ...») и удалить ее вручную в моем коде. Я использую c ++. Поэтому я хочу получить код продукта из файла msi, который собирается установить, и с помощью этого кода продукта удалите существующую версию продукта и установите новую. Но когда я пытаюсь открыть файл msi, чтобы получить его дескриптор, используя

MsiOpenPackage(msiPackagePath, &d_handle);

, я получаю сообщение об ошибке 1638. Поэтому я не могу открыть файл msi и не могу получить код товара из него. Мой вопрос: можно ли получить код продукта из файла msi, не открывая его с помощью MsiOpenPackage? Заранее спасибо!

1 Ответ

0 голосов
/ 10 июля 2020

Мой коллега только что решил проблему. Мы использовали функцию MsiOpenPackageEx и передали флаг MSIOPENPACKAGEFLAGS_IGNOREMACHINESTATE, чтобы игнорировать состояние компьютера и в любом случае вернуть дескриптор.

...