WIXを使用して、単一の製品の複数の機能をインストールできるセットアッププロジェクトを作成しようとしています。機能ツリーに他の機能を再インストールせずに、インストールされている機能の1つ(インストールされている他の機能から独立している)を更新するにはどうすればよいですか?
たとえば、HelloWolrdというプロジェクト(HelloWolrdに戻る)を作成して、「Helloworld!」を(サプライズで)印刷できるようにしたいと考えています。画面上。これらのHelloWorldアプリケーションのうち、Hello World 1、Hello World 2、HelloWorld3の3つがあるとします。それぞれがHelloWorld1、2、または3の画面にそれぞれ印刷されます。私が欲しいのは、デフォルトでこれら3つの「機能」すべてをインストールするだけでなく、後で各機能を個別にアップグレードできるMSIを作成することです。
これが私のソリューションのレイアウトです:
ソリューションエクスプローラーhttp://img12.imageshack.us/img12/5671/solutionexplorerm.jpg
私のWIXProduct.wxsファイルは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="ca484210-c719-4b2e-b960-45212d407c11" Name="HelloWorldInstaller" Language="1033" Version="1.0.0.0" Manufacturer="HelloWorldInstaller" UpgradeCode="68eeb8cb-9ef3-443c-870c-9b406129f7ff">
<Package InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
<!-- Create Directory Structure -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="Hello World" />
</Directory>
<Directory Id="DesktopFolder" Name="Desktop"/>
</Directory>
<DirectoryRef Id="INSTALLLOCATION">
<Component Id="HelloWorld1" Guid="6D1D9D33-DA17-4db3-8132-C39F32200C3A">
<RegistryKey Root="HKCU" Key="Software\HelloWorldInstaller\HelloWorld1\Install" Action="createAndRemoveOnUninstall">
<RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes" />
</RegistryKey>
<File Id="HelloWorld1.exe" Name="$(var.HelloWorld1.TargetFileName)" Source="$(var.HelloWorld1.TargetPath)" DiskId="1" Checksum="yes">
<Shortcut Id="HelloWorld1ApplicationDesktopShortcut" Name="Hello World 1" Description="Hello World Application 1" Directory="DesktopFolder" WorkingDirectory="INSTALLLOCATION" />
</File>
</Component>
<Component Id="HelloWorld2" Guid="B2D51F85-358B-41a7-8C45-B4BB341158F8">
<RegistryKey Root="HKCU" Key="Software\HelloWorldInstaller\HelloWorld2\Install" Action="createAndRemoveOnUninstall">
<RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes" />
</RegistryKey>
<File Id="HelloWorld2.exe" Name="$(var.HelloWorld2.TargetFileName)" Source="$(var.HelloWorld2.TargetPath)" DiskId="1" Checksum="yes">
<Shortcut Id="HelloWorld2ApplicationDesktopShortcut" Name="Hello World 2" Description="Hello World Application 2" Directory="DesktopFolder" WorkingDirectory="INSTALLLOCATION" />
</File>
</Component>
<Component Id="HelloWorld3" Guid="A550223E-792F-4169-90A3-574D4240F3C4">
<RegistryKey Root="HKCU" Key="Software\HelloWorldInstaller\HelloWorld3\Install" Action="createAndRemoveOnUninstall">
<RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes" />
</RegistryKey>
<File Id="HelloWorld3.exe" Name="$(var.HelloWorld3.TargetFileName)" Source="$(var.HelloWorld3.TargetPath)" DiskId="1" Checksum="yes">
<Shortcut Id="HelloWorld3ApplicationDesktopShortcut" Name="Hello World 3" Description="Hello World Application 3" Directory="DesktopFolder" WorkingDirectory="INSTALLLOCATION" />
</File>
</Component>
</DirectoryRef>
<Feature Id="HelloWorld1Feature" Title="Hello World 1" Level="1">
<ComponentRef Id="HelloWorld1"/>
</Feature>
<Feature Id="HelloWorld2Feature" Title="Hello World 2" Level="1">
<ComponentRef Id="HelloWorld2"/>
</Feature>
<Feature Id="HelloWorld3Feature" Title="Hello World 3" Level="1">
<ComponentRef Id="HelloWorld3"/>
</Feature>
</Product>
</Wix>
これがビルドされると、期待どおりの機能がインストールされます。ただし、HelloWorld1.vbに変更を加えて再コンパイルする場合は、すべてではなく、その機能のみを再インストール(アップグレード)できるようにしたいと思います。
1つのファイルを更新し、ソリューションを再構築してからmsiをインストールしようとすると、次のエラーが発生します。
MSIエラーhttp://img696.imageshack.us/img696/849/anotherversionisinstall.jpg
機能をアンインストールしてアップグレードコードを使用できるようにコードを更新しましたが、すべての機能がアンインストールされ、すべてが再インストールされました。
-実世界のアプリケーション-
これに対する実際のアプリケーションは、サービス/スケジュールされたタスクとして定期的に実行される複数のサポートアプリケーションを必要とする大規模なソフトウェアパッケージです。これらのサポートアプリを1つのMSIにインストールして、各exeを個別に展開するという悪夢を回避できるようにしたいと思います。exeの1つに更新があれば、そのexeを手動でコンパイルしてロールアウトできることは知っていますが、完全に再現可能な方法でこれを実行したいと思います。
どんな助けでも適用されるでしょう、
ありがとうございました!
編集:
GoogleCodeからダウンロードするためのソースを追加しました。再度、感謝します!