3

インストールの外部で、MSI データベースからターゲット パスを解決する必要があります。私は現在、Wix SDK を使用して、データベースの Directory および File テーブルにクエリを実行し、そこからパスを構築することでこれを行っていますが、パスの解決は既に組み込まれている必要があるようです。非公式のものであっても、これを行うライブラリはありますか?

この質問はすでにC++ について尋ねられていますが、唯一の答えは、質問が文字列に関するものであると誤解していました。

性能は特に気になりません。私の本当の関心事は、「.:Fonts」、「.:Windows」、「.:WinRoot」などの特別なフォルダーを解決することです。これは自分のコードで実行できますが、あまりエレガントではありません。

4

1 に答える 1

5

DTFが最初に出たときと同じことをしました。作業中のデータを取得するために、すべてのクエリとループを作成しました。そして、パフォーマンスはちょっと辛かったです。

次に、Microsoft.Deployment.WindowsInstaller.PackageアセンブリのInstallPackageクラスに気づきました。次のコードがそのクラスをどれほど速くて単純に使用しているかを見たとき、私はちょっとばかげた感じがしました。

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();
            }
        }
    }
}
于 2013-01-31T01:34:49.777 に答える