Как я могу разрешить пути MSI в C#?
Мне нужно решить целевые пути из базы данных MSI, вне установки. В настоящее время я делаю это с помощью Wix SDK, запрашивая каталог базы данных и таблицы файлов и создавая пути оттуда, но разрешение путей кажется чем-то, что уже должно быть встроено. Есть ли библиотека, которая делает это, даже что-то неофициальное, или мне придется делать это самостоятельно?
Этот вопрос уже был задан для C++, но единственный ответ так или иначе неправильно понял вопрос о струнах.
Я действительно не против выступления. Моя настоящая забота-это разрешение специальных папок, таких как".:Шрифты", ".:Windows", ".: WinRoot " и др. - что я все еще могу сделать в своем собственном коде, но не очень элегантно.
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(); } } } }