0

C# .Net で (Windows フォームを使用して) ツールを開発しようとしています。MSI ファイルと MST (変換ファイル) が既に生成されています。最初にmsiファイルを読み取って(フォームmenustripメニュー項目を使用してユーザーから入力として取得)、次にmstファイルを読み取る必要があります(msiが入力として取得した方法と同じ)。次に、入力された msi をコピーして一時的な msi (一時的な場所にある場合があります) を作成し、その一時的な msi に変換を適用します。次に、要件に従って msi テーブル (mst とマージ) をクエリできます。Visual Studio 2010 Professional エディションを使用しています。これは、Windowsインストーラ参照ライブラリを使用して、私の知る限り書いたコードです。

      using System;
      using System.ComponentModel;
      using System.Windows.Forms;
      using WindowsInstaller;
      using System.Xml;
      using System.IO;

        //// Create an Installer instance
        Type classType = Type.GetTypeFromProgID("WindowsInstaller.Installer");
        Object installerObj = Activator.CreateInstance(classType);
        Installer installer = installerObj as Installer;
        Database database = Installer.OpenDatabase(File_MSI,MsiOpenDatabaseMode.
         msiOpenDatabaseModeTransact);
            database.ApplyTransform (File_MST, MsiTransformError.msiTransformErrorViewTransform);
            WindowsInstaller.View viewmst = null;
            string sqlquerymst = string.Format("Select * FROM _TransformView");
            viewmst = database.OpenView(sqlquerymst);
            viewmst.Execute(null);
            database.Commit();
            viewmst.Close();
            string sql = String.Format("Select Property,Value FROM Property");
            WindowsInstaller.View view = database.OpenView(sql);
            view.Execute(null);
4

1 に答える 1

1

あなたが直面している問題は明確ではありませんが、私はあなたにいくつかの一般的な推奨事項を持っています:

  • MSIパッケージの構築にWiXツールセットを使用していない場合でも、DTFと呼ばれるMSIパッケージを操作するために.NETAPIを利用できます。詳細については、WiXツールセットと一緒にインストールされるDTF.chmファイルを参照してください。たとえば、DatabaseクラスとそのApplyTransform()メソッドを見てみましょう。
  • あなたが説明するシナリオは少しトリッキーに聞こえますが、単純化できると思います。その変換によってもたらされたものを読み取るために変換をMSIパッケージに適用する場合、この変換が構築される前のステップでそのデータを取得し、最も簡単なことではないMSIデータベースへのクエリを回避する方がはるかに簡単な場合があります。もちろん、これは自分でトランスフォームを作成する場合を指し、サードパーティのものではありません

これが何らかの形であなたを助けることができることを願っています。

于 2012-07-25T10:52:50.800 に答える