5

現在、クライアントソフトウェアには4つのインストーラーがあります。

  • ClientSetupTest
  • ClientSetupProduction
  • ClientUpdateTest
  • ClientUpdateProduction

それらの唯一の違いは、セットアップにはCrystal Reportsの再配布可能なファイルが含まれ、アップデートには含まれないことです。Test and Productionは、それらが実行される環境を指定するだけであり、唯一の違いはClient.exe.configファイルに1行あります。

ばかげている、私は知っている、それが私がCrystalReportsを取り除いた後にそれらすべてを1つのインストーラーに置き換えた理由です。新しいインストーラーは、選択した環境をsetup.configに書き込みます。これは、file属性によって参照されます(ここを参照)。

「file」属性は、この新しいインストーラーを使用した構成ファイルの新機能です。私が遭遇している問題は、古いインストールでClient.exe.configファイルを変更してから新しいインストーラーを実行すると、構成ファイルが「file」属性で更新されないことです。

ファイルを強制的に更新する方法はありますか?RemovePreviousVersionsは、私が何かを誤解していない限り、別のインストーラーであるため、正確には機能しません。おそらく機能する私の現在のアイデアは、OnBeforeInstallメソッドにコードを追加して、古いClient.exe.configの名前をバックアップファイルに変更することです。これにより、常に新しいファイルが書き込まれます。ただし、インストーラー自体にはもっと簡単な解決策があるはずです。何か案は?

編集:base.OnBeforeInstall()を呼び出す前に、古い構成ファイルの名前をClient.exe.config.oldに変更しても機能しませんでした。ファイルの名前を変更しましたが、新しいファイルを作成することはありませんでした。

4

1 に答える 1

5

Windows インストーラーは、変更されたファイルを更新しません

バージョン管理されていないファイルはユーザー データです - 変更日がコンピューター上のファイルの作成日より後の場合は、ユーザーのカスタマイズが削除されるため、ファイルをインストールしないでください。変更日と作成日が同じ場合は、ファイルをインストールします。作成日が変更日より後の場合、ファイルは変更されていないと見なされ、ファイルをインストールします。

いくつかのオプションがあります:

  • その場でファイルを変更するカスタム アクションを含めます。これは、スクリプトまたは .NET コードである可能性があります。

  • あなたが言うように - 既存のファイルを邪魔にならないように移動します。インストーラーはそれで止まりません。ただし、想像している順序でそれが起こることを確認する必要があります。順序を理解するためにOrcaが必要になる場合があります。

  • 作成日を「今日」に設定するカスタム オプションを含めます。これは、 Scripting.FileSystemObjectを使用して、スクリプト化されたカスタム アクションで非常に簡単になるはずです。その後、Windows インストーラーによって上書きされます。

于 2009-08-31T23:05:35.797 に答える