1

現在、会社のエンタープライズ ライブラリに変更を加えており、開発者が MSI インストーラーまたは何らかのセットアップ実行可能ファイルを使用してライブラリをセットアップできるようにする展開プロジェクトの作成を検討しています。

このタスクを達成するために、マージ モジュール プロジェクトを使用することを検討していました。基本的な Google 検索では、Merge Module Product を使用するための役立つリソースは生成されませんでした。

マージ モジュール プロジェクトの作成に関する有用なリソース/チュートリアルを知っている人はいますか?または、このタスクを達成するためのより良い提案がありますか?

アップデート

必要なすべてのアセンブリへの適切な参照を使用して、マージ モジュール プロジェクトをビルドすることができました。.MSM ファイルが作成されました。実際に実行してテストするための次のステップは何ですか?

4

2 に答える 2

2

MSM自体を実行またはテストすることはできません。ただし、MSI に埋め込んでから、標準ツールを使用して MSI のインストールを試みることができます (つまり、MSI を手動で右クリックして [インストール]または[アンインストール]を選択するか、Visual Studio を使用して行うか、対応するコマンドを実行します) 。 .msiexec.exe

MSM を MSI に埋め込む最も簡単な方法は、Visual Studio でセットアップ プロジェクトを作成し、ソリューションで作成したばかりのマージ モジュール プロジェクトからマージ モジュールを追加することです。これにより、MSM ファイルが自動的に参照され、MSI に組み込まれます。

于 2009-03-28T09:45:20.410 に答える
1

Visual Studio 2005 を使用して唯一のマージ モジュールを作成したときも、同様のドキュメントの不足に直面しました。

Visual Studio 2005 (または 2008) では、MSI プロジェクトと MSM プロジェクトの両方が非常に似た方法で処理されます。ファイルをプロジェクトに追加し (明示的に、または同じソリューション内にある別のプロジェクトへの参照を介して)、プロジェクトを右クリックして次の操作を行います。

  1. ファイル システムを表示します。
  2. レジストリ設定を表示します。
  3. ファイルの種類の関連付けを表示します。
  4. カスタム アクションを表示します。

カスタム アクションは、たとえば、Installerクラスをサブクラス化することによって、.NET アセンブリに実装できます。たとえば、MSM/MSI がインストールまたはアンインストールされたときにプリンターをインストールまたはアンインストールする例を次に示します。

using System.ComponentModel;
using System.Configuration.Install;
using System.Diagnostics;

namespace Epsitec.PostScriptPrinterInstaller
{
    [RunInstaller (true)]
    public partial class PrinterInstaller : Installer
    {
        public PrinterInstaller()
        {
            this.InitializeComponent ();
        }
        public override void Install(System.Collections.IDictionary stateSaver)
        {
            base.Install (stateSaver);
            string sysroot = System.Environment.GetEnvironmentVariable ("SystemRoot");
            string infpath = @"""" + System.IO.Path.Combine (sysroot, @"inf\ntprint.inf") + @"""";
            ProcessStartInfo info;
            Process process;

            info = new ProcessStartInfo ("rundll32.exe",
                       @"printui.dll,PrintUIEntry /if /b ""PostScript"" /m ""MS Publisher Color Printer"" /f "+infpath+@" /r ""FILE:""");

            process = Process.Start (info);
            process.WaitForExit ();
        }

        public override void Uninstall(System.Collections.IDictionary savedState)
        {
            base.Uninstall (savedState);
            ProcessStartInfo info;
            info = new ProcessStartInfo ("rundll32.exe",
                       @"printui.dll,PrintUIEntry /dl /n ""PostScript""");
            Process process = Process.Start (info);
            process.WaitForExit ();

            info = new ProcessStartInfo ("rundll32.exe",
                       @"printui.dll,PrintUIEntry /dd /m ""MS Publisher Color Printer""");
            process = Process.Start (info);
            process.WaitForExit ();
        }
    }
}

この情報で、あなたが少しでも前進できることを願っています。

于 2009-03-25T21:19:32.013 に答える