Visual Studio 2005 を使用して唯一のマージ モジュールを作成したときも、同様のドキュメントの不足に直面しました。
Visual Studio 2005 (または 2008) では、MSI プロジェクトと MSM プロジェクトの両方が非常に似た方法で処理されます。ファイルをプロジェクトに追加し (明示的に、または同じソリューション内にある別のプロジェクトへの参照を介して)、プロジェクトを右クリックして次の操作を行います。
- ファイル システムを表示します。
- レジストリ設定を表示します。
- ファイルの種類の関連付けを表示します。
- カスタム アクションを表示します。
カスタム アクションは、たとえば、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 ();
}
}
}
この情報で、あなたが少しでも前進できることを願っています。