Microsoft.Deployment.WindowsInstaller.ProductInstallation не имеет свойства UpgradeCode - PullRequest
1 голос
/ 20 января 2012

Я пытаюсь использовать библиотеку WiX, чтобы провести некоторый анализ машинной продукции для проекта, в котором я работаю.Я почесал голову, почему это отсутствует в классе в заголовке?

Есть ли способ получить это из библиотеки WiX, которую мне не хватает?Я знаю, как это сделать с помощью взаимодействия msi.dll, но хотел попробовать сделать все из одной библиотеки.Мне просто кажется странным, что такая ключевая часть пакета MSI отсутствует.

Версия WiX 3.5.2519.0

1 Ответ

3 голосов
/ 20 января 2012

Класс ProductInstallation инкапсулирует функцию MsiGetProductInfo , найденную в Msi.dll.Поскольку эта функция не предоставляет UpgradeCode, она также не выполняет ProductInstallation.

В ProductInstallation есть член InstallSource (эквивалент INSTALLPROPERTY_INSTALLSOURCE), и вы можете использовать его для создания класса InstallPackage и доступа к его аксессору свойств.

static public string GetPackageUpgradeCode(string packagePath)
{
    string upgradeCode = string.Empty;
    using (InstallPackage package = new InstallPackage(packagePath, DatabaseOpenMode.ReadOnly))
    {
        upgradeCode = package.Property["UpgradeCode"];
    }
    return upgradeCode;
}

Если вы действительно не хотите добавлять другую ссылку, вы можете открыть ее как базу данных и использовать элемент ExecuteScalar, чтобы выбрать значение UpgradeCode из таблицы свойств.

...