Windows GUID или список приложений - PullRequest
0 голосов
/ 05 октября 2010

Мне было интересно, можно ли получить из Windows список установленных приложений, включая их GUID и Upgrade GUID. У меня проблемы с получением обновления для одной из моих программ, и мне нужно проверить эти значения для старой версии программы. Спасибо за помощь!

1 Ответ

2 голосов
/ 05 октября 2010

Вы можете использовать функции API MSI для перечисления всех установленных продуктов и запроса их свойств.Если вы замените MsiGetProductInfo на MsiGetProductInfoEx, вы сможете запросить дополнительную информацию, такую ​​как контекст установки или SID пользователя, связанный с установкой.

Однакоэто не позволяет перечислять UpgradeCode.Насколько я знаю, MSI не ведет записи, связывающие ProductCode с UpgradeCode;доступно только обратное сопоставление, и вы можете перечислить продукты, связанные с UpgradeCode, используя функцию MsiEnumRelatedProducts.

Ниже вы найдете пример кода, который перечисляет установленные или рекламируемые продуктыи их ProductCode с использованием C #:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

class Program
{
    [DllImport("msi.dll", CharSet = CharSet.Unicode)]
    static extern Int32 MsiGetProductInfo(string product, string property,
        [Out] StringBuilder valueBuf, ref Int32 len);

    [DllImport("msi.dll", SetLastError = true)]
    static extern int MsiEnumProducts(int iProductIndex,
        StringBuilder lpProductBuf);

    static void Main(string[] args)
    {
        StringBuilder sbProductCode = new StringBuilder(39);
        int iIdx = 0;
        while (MsiEnumProducts(iIdx++, sbProductCode) == 0)
        {
            Int32 productNameLen = 512;
            StringBuilder sbProductName = new StringBuilder(productNameLen);

            MsiGetProductInfo(sbProductCode.ToString(),
                "ProductName", sbProductName, ref productNameLen);

            Console.WriteLine("Product: {0}\t{1}", sbProductName, sbProductCode);
        }
    }
}

Обновление

Если у вас еще есть установщик MSI предыдущей версии, вы можете просто открыть файл с помощью Orca ипоиск кода обновления.

...