Как я могу разрешить пути MSI в C#?


Мне нужно решить целевые пути из базы данных MSI, вне установки. В настоящее время я делаю это с помощью Wix SDK, запрашивая каталог базы данных и таблицы файлов и создавая пути оттуда, но разрешение путей кажется чем-то, что уже должно быть встроено. Есть ли библиотека, которая делает это, даже что-то неофициальное, или мне придется делать это самостоятельно?

Этот вопрос уже был задан для C++, но единственный ответ так или иначе неправильно понял вопрос о струнах.

Я действительно не против выступления. Моя настоящая забота-это разрешение специальных папок, таких как".:Шрифты", ".:Windows", ".: WinRoot " и др. - что я все еще могу сделать в своем собственном коде, но не очень элегантно.

1 3

1 ответ:

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

Затем я заметил класс InstallPackage в Microsoft.Развертывание.WindowsInstaller.Сборка пакета. Я почувствовал себя немного глупо, когда увидел, как быстро и просто следующий код использует этот класс:

using System;
using Microsoft.Deployment.WindowsInstaller;
using Microsoft.Deployment.WindowsInstaller.Package;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var package = new InstallPackage("foo.msi", DatabaseOpenMode.ReadOnly))
            {
                foreach (var filePath in package.Files)
                {
                    Console.WriteLine(filePath.Value);
                }
                Console.WriteLine("Finished");
                Console.Read();
            }
        }
    }
}