2017-04-25 5 views
0

私たちは、私たちのルビーベースの製品をインストールするwixでビルドされたMSIを持っています。最初のバージョンをリリースしたときにバグがありました。アップグレードは、ルビ設定ファイル(gemrc)の変更を上書きして、場合によっては製品を効果的に破棄します。WIX、設定ファイルを置き換えない方法

私はアップグレードで設定ファイルを削除したり、置き換えたりしないようMSIに依頼してきました。

は何私が今持っていることは次のとおりです。

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallExecuteAgain" /> 
</InstallExecuteSequence> 


    <Directory Id="embeddedDir" Name="embedded"> 
    <Directory Id="embeddedEtcDir" Name="etc"> 
     <Component Id="gemrcComponent" Guid="uuid..." NeverOverwrite='yes' Permanent='yes'> 
     <File Id='gemrc' Name='gemrc' 
       Source='$(var.ProjectSourceDir)\embedded\etc\gemrc.default' Vital='yes' KeyPath='yes' /> 
     </Component> 
    </Directory> 

    </Directory> 

しかし、まったくgemrcでインストールを残す新バージョン(1.1)に現在のバージョン(1.0)から行きます。今後は動作しますので、1.1から1.2に移行すると、既存の(変更された)ファイルが残ります。

古い1.0 MSIを使用して既存のインストールを削除し、そのバージョンに削除する必要がある製品の一部としてマークされたgemrcファイルがあると仮定しています。

これは、カスタムアクションを使用してインストールする前に一時パスにファイルをコピーしてから、それを後で戻す唯一の方法を意味します。 または類似のもの)。より良い/より簡単な方法がありますか?

+0

インストーラと設定ファイルに問題があるため、私たちはプロジェクトで設定ファイルをインストールしないことを決めました。トラブルはそれに値するものではありません。私たちのアプリケーションは既存の設定ファイルを探し、存在しない場合はデフォルトファイルを作成します。 削除の際には、設定ファイルを保存しておいてください。削除しない場合は削除してください。 – linuxrocks

答えて

2

次のようにあなたがこれを見てすることができる理由のいくつかがありますが、あなたの場合に適用可能性があると言うのに十分な情報がありません。

あなたは、もともと「早期」にスケジュールメジャーアップグレードを持っていた場合(InstallInitializeまたは早く)アップグレードすると、古い製品が完全にアンインストールされ、新しい製品がインストールされます。これは設定ファイルの上書きのように見えますが、厳密にはそうではありません。この問題の実際の根本的な原因を特定したことがあるかどうか、またはメジャーアップグレードのスケジュールが異なるかどうかについては言及していません。

InstallExecuteAgainの後に予定されているメジャーアップグレードでは、アップグレードは古い製品の上にインストールされ、ファイルの置き換えルールに従います。したがって、設定ファイルがインストール後に実際に更新された場合、置き換えられません。

設定ファイルのコンポーネントIDが変更された場合、(InstallExecuteAgainアップグレードでも)設定ファイルのコンポーネントIDが削除されていることがわかります。ファイル共有はコンポーネントIDによってカウントされます。そのため、以前のインストールと同じではない設定ファイルのコンポーネントIDがアップグレードに含まれていると、前のファイルの参照カウントが削除されるため、異なるIDを持つ別の同じ名前をインストールしようとしています。

詳細なMSIログを有効にしてアップグレードして、設定ファイルの内容を確認する必要があります。それが明らかでない場合は、他の人が見ることのできるどこかに投稿してください。

+0

コンポーネントIDが変更されました。旧バージョンでは、そのファイルが別のコンポーネントとして指定されていませんでした。 また、1.1 MSIのgemrcファイルは、MSIの作成時に生成されるため、常に最新の最新のタイムスタンプを保持します。 – user831865

関連する問題