2010-10-05 3 views
0

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

ответ

2

Вы можете использовать функции 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); 
     } 
    } 
} 

Update

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

+0

Я, конечно же, открыл MSI с Orca, и все проверено, но я просто хотел напрямую проверить Windows, чтобы увидеть, произошло ли что-то странное во время начальной установки. Коды обновления одинаковы, и обновление просто не работает. См. Http://stackoverflow.com/questions/3863171/wix3-major-upgrade-not-working – Adkins

Смежные вопросы