2009-06-22 97 views
5

我有一個Windows Forms應用程序,其中包含已經使用Visual Studio創建的安裝程序(.msi)。我現在正在爲版本2.0創建一個新的安裝程序,並將屬性RemovePreviousVersions設置爲true。我們可以指示Visual Studio安裝程序保留現有文件以便重新安裝嗎?

現在,當我安裝2.0超過1.0時,它將刪除1.0並完全安裝2.0。

如果你發現已經安裝了一些文件(比如用於數據的.xml文件),那麼是否可以告訴安裝程序,然後不重寫它們?

我想有我2.0的安裝服務2個用途:

  • 從頭開始安裝新的用戶
  • ,現有用戶的升級,但不會失去他們的自定義

回答

2

當我在類似的情況下,我做的是:

由每個用戶定製並且不應該被安裝程序觸及的文件不包含在第e MSI(不在Visual Studio安裝項目中)。當應用程序第一次運行時,我通過代碼生成了XML文件。

靜態文件(例如用於填充Dropdownlists的數據)我包含在MSI中,我可以通過使用Visual Studio構建新的MSI來更新這些文件。

基本上不包括MSI項目中的可定製文件。在代碼中爲新用戶創建它們。

我從來沒有看過告訴MSI不要更新MSI文件中包含的某些文件。我提出的解決方案對我來說非常完美。我不知道是否可以做到。

我希望這會有所幫助。

13

VS中的部署項目不覆蓋文件。會發生什麼情況是,因爲您將RemovePreviousVersions設置爲true,所以當您更改程序文件版本和安裝項目的ProductCode GUID時,它將首先卸載以前的版本,然後將全新安裝新版本。

爲了確保某些文件不會被覆蓋,我通常會將它們從Content或Primary輸出文件(無論它們位於何處)中排除,然後將它們單獨添加到安裝項目中。這樣做,你可以單獨設置這些文件的屬性。您正在查找的屬性稱爲「永久」,如果設置爲true,則永遠不會卸載相關文件,因此永遠不會用新版本覆蓋該文件。唯一的缺點是,當您卸載產品時,永久文件不會從他們的目標位置刪除,但在我的情況(通常是本地數據庫文件),這是一件好事;!)

乾杯

[編輯]以上是真正的VS 2008 SP1避風港」 t試過它在其他版本,所以希望你使用相同的VS版本或它適用於你使用的版本

[編輯]哦,也可以使用「條件」屬性來實現simil AR。如果你這樣做,確保「傳遞」設置爲True,以便始終評估條件。還沒有嘗試過與條件,但這是另一個選項,你可以看看。除了這兩個,我認爲這幾乎是VS部署項目。

+0

太好了,謝謝!這應該被標記爲答案。 – 2010-06-29 12:12:40

+1

文件替換的規則是[here](http://msdn.microsoft.com/zh-cn/library/aa370531(v=VS.85).aspx)。 – CyberMonk 2010-12-17 01:11:10

+0

使用VS2010 SP1。 它不適合我... 即使Permanet設置爲真,文件也會被替換! 當磁盤上的文件的日期/時間早於軟件包創建的日期時間時,它將被替換。 在VS2010中不是SP1,它在磁盤上的文件的日期時間早於用於創建軟件包的文件的日期時間時被替換。 設置源文件的日期時間爲01/01/2001解決了我很多麻煩,但它不再工作了! – 2015-10-09 15:07:29

相關問題