C#アプリケーションを開発し、Wixでインストール可能なMSIファイルにパッケージ化します。アプリケーションの実行可能ファイルと.dllファイルは、ProgramFilesFolderの標準の場所にインストールされます。
アプリケーションを起動すると、ローカルの.sdfファイル(データベース)が存在しない場合は作成されます。
アンインストールすると(たとえば、新しいバージョンへのアップグレードの一環として)、この.sdfファイルを除くすべてが削除されます。新しいバージョンをインストールすると、古い.sdfファイルが取得され、引き続き使用されます。
ここで問題となるのは、.sdfファイルが現在ProgramFilesFolderの下にも存在することです。「旅行かばんをエンジンルームに保管」したくないので、この.sdfファイルをProgramDataに移動します。
したがって、アプリケーションコードでこの変更を行います。つまり、別のパスで.sdfファイルを使用します。次回アップグレードするときは、既存の.sdfファイルをProgramFilesFolderからProgramDataに移動する必要があります。
質問-このファイルを移動する理想的な方法は何ですか?
1)Wixセットアップコードで-「古い」バージョン(.sdfファイルの場所を変更したバージョンより古い)から「新しい」(新しいバージョンまたは同じバージョン)にアップグレードが行われているかどうかを認識します変更)、この場合はファイルを移動します。ここでの良い点は、Wixがすべてのバージョン番号を「認識」しており、それらに基づいて条件付きで移動できることです。
2)C#アプリケーションコードでは、WixでCustomActionを作成するよりもおそらく簡単です。ただし、アプリケーションコードはバージョンについて何も知らないため、Wixの場合と同じ「古い」バージョンと「新しい」バージョンを使用するロジックを使用することはできません。したがって、一般的なロジックのみを使用できます。たとえば、新しい場所に存在する場合は新しい場所のファイルを使用します。そうでない場合は、ファイルが古い場所に存在するかどうかを確認してから、ファイルが両方に存在する場合は新しい場所に移動します。古い場所で、新しい場所のファイルを使用します。
最善の方法を選ぶのを手伝っていただけませんか?
説明されているアプローチの欠点/リスクはありますか?
より良い解決策はありますか?