2010-11-17 4 views
15

RemovePreviousVersionsを:のVisual Studio 2010 - 私は、次の設定を使用してVisual Studio 2010の展開のプロジェクトを持っている

DetectNewerInstalledVersion = True 
InstallAllUsers = True 
RemovePreviousVersions = True 

私が構築していたプロジェクトには、いくつかのDLLを持っているシリアル化のために、ファイルのバージョンを実装したことを、レガシーの方法によるものこのプロジェクトは増分することができません(私たちは変更の過程にあります)。

既存のファイルを完全に削除する(または少なくとも新しいファイルをすべて上書きする)セットアッププロジェクトを入手するにはどうすればよいですか?

たぶん私は周りと、既存の質問を探しており、それらのすべてがあなたのファイルをインクリメント」と言う(誰かがこれを行うために私をリンクすることができ、私は見つけることができません)インストーラのスクリプトアンインストールをする

必要私の場合、これは現在オプションではありません。

答えて

20

Visual Studio(2008および2010)で作成されたセットアッププロジェクトは、バージョン番号が増分されている場合にのみファイルを置き換えます。明らかな解決策は、すべてのバージョン番号を増やすことです。しかし、あなたが言ったように、これはあなたにとって実現可能ではありません。

.msiファイルの動作は、基本的には、RemoveExistingProductsアクションが実行された瞬間によって決まります。 VS 2008で作成されたインストーラは、の後にの新製品がインストールされた後にこの動作をスケジュールします。したがって、バージョンが増分されていない変更されたアセンブリは置き換えられません。更新動作に関するいくつかの詳細は、このスレッドで説明されています

RemovePreviousVersions=True but previous version is not removed from the target machine

は、動作を変更するには、RemoveExistingProductsアクションが前を実行されるように作成された.msiファイルにパッチを適用することができます新しい製品がインストールされます(これはVisual Studio 2005でセットアップを作成した場合の動作です)。例えば、ポスト建てステップとして実行小さなVBScriptを使用して行われる:

Dim objInstaller 
Dim objDatabase 
Dim objView 
Dim objResult 

Dim strPathMsi 

If WScript.Arguments.Count <> 1 Then 
    WScript.Echo "Usage: cscript fixRemovePreviousVersions.vbs <path to MSI>" 
    WScript.Quit -1 
End If 

strPathMsi = WScript.Arguments(0) 

Set objInstaller = CreateObject("WindowsInstaller.Installer") 
Set objDatabase = objInstaller.OpenDatabase(strPathMsi, 1) 
Set objView = objDatabase.OpenView("UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'") 

WScript.Echo "Patching install sequence: UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'" 
objView.Execute 
objDatabase.Commit 

WScript.Quit 0 
+3

本当にありがとうございます。私のPostBuildEventは、セットアッププロジェクトディレクトリにvbsを保存します。cscript $(ProjectDir)fixRemovePreviousVersions.vbs $(BuiltOuputPath) – Seph

+0

@Seph MSIプロジェクトにPostBuildEventをどのように追加しましたか? – wal

+0

私はそれを見つけました、プロジェクトのプロパティウィンドウに隠されています。 :) – wal

1

は、セットアップのカップルと同じ問題が、フォーム2005 T0 2010 編集セットアップ(の.msi)がORCAを使用してファイルと実行順序を変更し移動しました。 InstallInitialize前に既存の製品を削除します これでインストールの問題が解決されました。

0

新規インストールの前に

  1. に完全なアンインストールを実行する最も簡単な方法は、あなたの「スタートアッププロジェクト」、右クリックして選択し、「オプション」を参照してください。
  2. 「アセンブリ情報」ボタンをクリックします。次に、 "アセンブリバージョン"と "ファイルバージョン"の値をインクリメントし、 "OK"をクリックします。
  3. その後、セットアッププロジェクトに行きます。 "DetectNewInstalledVersion"がtrueに設定されていることを確認し、 "RemovePreviousVersion"が真であれば、 "バージョン"を例えば1.0.0から1.0.1に増やしてから、 "ProductCode"を更新するようダイアログボックスが表示されたら、はい"。起動プロジェクトを "再構築"してから、セットアッププロジェクトを再構築してください。

これはトリックを行います。楽しい。次に、セットアップフォルダを右クリックして、「エクスプローラでフォルダを開く」を選択し、「リリース」フォルダを確認します。

+0

OPに記載されているようにバージョンをインクリメントできません: 'このプロジェクトのファイルバージョンはインクリメントできませんでした。 – Seph

関連する問題