2016-06-21 15 views
1

私は、単純な.NET WPF C#アプリのインストーラを作成しようとしています。私はVS 2013とWiX 3.10.2を使用しています。 Wix Tutotial/.NET/Bootstrappingの手順に従って、.NET WebインストーラとApp Setup.msiをチェーンするBoostrap.exeを作成しました。WiX Bootstrapper

EDIT:私の目標は、小規模なアップデート、マイナーなアップグレード、および主要なアップグレードのシナリオでWiXブートストラップとセットアッププロジェクトを設定する方法を理解することです。

新品のインストールを実行すると、すべての機能がうまく動作しているようです。しかし、新しくビルドされたBootstrap.exeを既存のインストール上で実行すると、アプリケーション&の機能に重複したエントリが表示され、アプリケーションのターゲット場所にファイルが変更されません。同じエントリがAppsに残るはずです。&機能とターゲットの場所を更新する必要があります。 EDIT:REINSTALLMODEを変更する方法がないようですか?

製品IDを追加してから、セットアップ(マイナーアップグレード)のバージョンを変更すると、ユーザーがインストールをキャンセルしてブートストラップが失敗しますか?ログファイルに「エラー0x80070642:MSIパッケージのマイナーアップグレードを実行できませんでした」と表示されます。 EDIT:MSIログの中で、保存されたハッシュ値が現在のものと一致しないため、SecureRepairがエラーコード39439E438(?)で失敗する可能性があります。

小規模なアップグレード、マイナーアップグレード、メジャーアップグレードのユースケースを適切に処理できるように、またはWiX Bootstrapperが主なアップグレードのみをサポートするように、BoostrapperプロジェクトとセットアップWiXプロジェクトの間に推奨される構成がありますか?

私は調査を続けるつもりですが、私は結果を更新します。

ヒントをいただければ幸いです。 ありがとうございます!ここで

私はかろうじてWiXのウィザードから変更されたソースファイルは、コードを生成されます。

--- --- Product.wxs

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<Product Id="*" Name="SetupProject1 1.0.0.0" Language="1033" Version="1.0.0.0" Manufacturer="Acme" UpgradeCode="4c8a8cbf-e3d0-410c-8a8d-7e67eb4e7ff7"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" InstallPrivileges="limited" /> 

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
    <MediaTemplate /> 

    <Feature Id="ProductFeature" Title="SetupProject1" Level="1"> 
     <ComponentGroupRef Id="ProductComponents" /> 
    </Feature> 
</Product> 

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="LocalAppDataFolder"> 
      <Directory Id="AcmeFolder" Name="Acme"> 
       <Directory Id="INSTALLFOLDER" Name="WpfApplication1" /> 
      </Directory> 
     </Directory> 
    </Directory> 
</Fragment> 

<Fragment> 
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
     <Component Id="ProductComponent" Guid="8CA0B70F-39DA-4B4B-9104-46C58E26FCF4"> 
      <CreateFolder/> 
      <RemoveFolder Id="RemoveAcmeFolder" Directory="AcmeFolder" On="uninstall"/> 
      <RemoveFolder Id="RemoveINSTALLFOLDER" On="uninstall" /> 
      <RegistryValue Root="HKCU" Key="Software\Acme\WpfApplication1" Name="Version" Type="string" Value="[ProductVersion]" KeyPath="yes" /> 
      <File Source="$(var.WpfApplication1.TargetPath)" KeyPath="no" /> 
     </Component> 
    </ComponentGroup> 
</Fragment> 

--- Bundle.wxs ---

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"> 

<Bundle Name="Bootstrapper1 1.0.0.0" Version="1.0.0.0" Manufacturer="Acme" UpgradeCode="e1092cbb-9134-42fc-a9f2-652f95f361fd"> 
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" /> 

    <Chain> 
     <MsiPackage Name="Acme Setup" SourceFile="$(var.SetupProject1.TargetPath)" Vital="yes" /> 
    </Chain> 
</Bundle> 

答えて

3
  • 実行ファイルを変更する場合は、バージョン番号を増やしてください。 Windowsインストーラは、同じバージョンのファイルが同じであるとみなします。

  • .msiパッケージをアップグレードするには、メジャーアップグレード(通常)またはマイナーアップグレードのいずれかのバージョン番号を増やします。

  • バンドルをアップグレードするには、バージョン番号を増やします。デフォルトでは、Burnは同じバージョンがインストールされたバンドルを保持します。

+0

ありがとうございました。理論的には、製品の変更(小規模な更新、マイナーなアップグレード、およびメジャーアップグレード)の3つのカテゴリがあることはわかっています。私が見つけようとしているのは、WiXソリューションをどのように設定するかです。私は小さなアップデートを考えています。マイナーアップグレードは、公式のバグ修正や機能追加リリースになります。メジャーアップグレードは、新しいバージョンのオペレーション/レイアウトが古いバージョンと互換性がない場合、または2つのバージョンが存在して動作する並んで。これは理にかなっていますか? –

+0

ドキュメントのヒントREINSTALLMODEコードを使用して、ファイルの更新方法を制御できます。たとえば、 "e"コードは、ターゲットファイルが同じバージョンであっても再インストールされます。 Wi-FiでREINSTALLMODEはどこで制御されていますか? –

+0

BurnがREINSTALLMODEを処理します。アップグレードの種類については、http://www.joyofsetup.com/2008/12/29/neither-more-norless/を参照してください。特定のニーズを持たない限り、メジャーアップグレード以外のすべてを無視できます。 –

関連する問題