5

Visual Studioで既に作成されたインストーラー(.msi)を備えたWindowsフォームアプリケーションがあります。RemovePreviousVersions現在、プロパティをtrueに設定してバージョン2.0の新しいインストーラーを作成しています。

これで、2.0を1.0にインストールすると、1.0が削除され、2.0が完全にインストールされます。

すでにインストールされているファイル(データに使用される.xmlファイルなど)が見つかった場合にインストーラーに通知して、それらをオーバーライドしない方法はありますか?

2.0インストーラーに2つの目的を果たさせようとしています。

  • 新規ユーザーのために最初からインストールする
  • 既存のユーザーはアップグレードしますが、カスタマイズを失うことはありません
4

2 に答える 2

15

VSのデプロイメントプロジェクトはファイルを上書きしません。RemovePreviousVersionsがtrueに設定されているため、プログラムファイルのバージョンとセットアッププロジェクトのProductCode GUIDを変更すると、最初に前のバージョンがアンインストールされ、次に新しいバージョンのクリーンインストールが実行されます。

一部のファイルが上書きされないようにするために、通常、コンテンツまたはプライマリ出力ファイル(ファイルが配置されている場所)からそれらを除外してから、セットアッププロジェクトに個別に追加します。これにより、これらのファイルのプロパティを個別に設定できます。探しているプロパティは「パーマネント」と呼ばれ、trueに設定すると、問題のファイルがアンインストールされないため、新しいバージョンで上書きされることはありません。これの唯一の欠点は、製品をアンインストールするときにパーマネントファイルがファイルされることです。ターゲットの場所から削除されることはありませんが、私の場合(通常はローカルDBファイル)、それは良いことです;)

乾杯!

[編集]上記はVS2008SP1に当てはまります。他のバージョンでは試したことがないので、同じVSバージョンを使用しているか、使用しているバージョンで機能することを願っています。

[edit2]ああ、「Condition」プロパティを使用して同様のことを実現することもできます。その場合は、「推移的」がTrueに設定されていることを確認して、条件が常に評価されるようにします。条件でそれを試したことがありませんが、それはあなたが見ることができるもう一つのオプションです。これらの2つを除けば、VS展開プロジェクトについてはほぼこれで終わりだと思います。

于 2009-06-23T01:29:52.313 に答える
2

私が同じような状況にあったとき、私がしたことは次のとおりです。

各ユーザーによってカスタマイズされ、インストーラーが触れてはならないファイルは、MSI (Visual Studio セットアップ プロジェクトではありません) に含まれていませんでした。アプリを初めて実行したときに、コードを使用して XML ファイルを生成しました。

静的なファイル (ドロップダウン リストの入力に使用されたデータなど) を MSI に含め、Visual Studio で新しい MSI を構築することでそれらを更新できます。

基本的に、カスタマイズ可能なファイルを MSI プロジェクトに含めないでください。新しいユーザー向けのコードでそれらを作成します。

MSI ファイルに含まれる特定のファイルを更新しないように MSI に指示することについては検討したことがありません。私が思いついた解決策は私にとって完璧でした。それができるかどうかはわかりません。

これが役立つことを願っています。

于 2009-06-22T17:13:14.303 に答える