2011-04-26 52 views
2

似乎升級安裝不會用新版本替換文件,但它們實際上會卸載舊的安裝程序包並安裝新的安裝程序包。讓我們想象我已經安裝了我的應用程序,並在安裝目錄中生成了一些文件。然後用戶獲得新版本的產品並啓動安裝包。該軟件包刪除舊版本的產品(因爲新的安裝軟件包已將「刪除以前的版本」設置爲true,更高的版本號和不同的產品代碼)。由應用程序創建但不是由包創建的文件不會被刪除,而且這很好。但用戶可以將新版本安裝到其他位置,然後應用程序將找不到舊的應用程序文件。如何處理它?如果應用程序已安裝,請編寫一些自定義操作和條件以跳過文件夾選擇屏幕?或者,也許已經有一種內置的方式來升級指定目錄中的舊安裝文件?可以升級安裝替換文件嗎?

回答

1

您的應用程序不應將其設置存儲在Program Files中,它們應存儲在CommonAppDataFolder,AppDataFolderLocalAppDataFolder中。如果您使用這些文件夾中的一個來存儲您的應用程序設置/數據,則用戶可以自由將其安裝到任何其他位置,並且應用程序仍會看到其設置/數據。


據我瞭解,升級的行爲取決於你計劃安裝序列RemoveExistingProducts行動。


編輯:既然你不能改變你的程序保存其文件,你將不得不手動跟蹤的安裝位置。執行升級操作時,更新的產品通常會安裝到相同的位置(這可能需要更改您的嚮導UI)。

如果您希望即使手動重新安裝(即用戶卸載您的應用程序,然後再次將其重新安裝到另一個位置)仍保留設置,我所看到的唯一選項是將安裝位置存儲在註冊表中。如果該值不在註冊表中,則不應運行其他操作。如果存在以前安裝位置的值,則將其保存。然後將設置/數據從舊位置移動到新位置(通過將臨時行添加到MoveFile表中)。最後,將新的安裝位置保存到註冊表中。

請注意,在Windows Vista及更高版本下,在Program Files中存儲設置/文件可能無法正常工作,尤其是在UAC打開時;並且您的設置可能實際上存儲在虛擬存儲區而不是程序文件中。更新應用程序將比嘗試移動文件更好。

+0

這是一個好點,但我不能改變我的應用程序存儲文件的方式/方式。 – 2011-04-26 11:02:04

+0

@ Bogdan0x400我更新了答案。 – 2011-04-26 12:21:02

相關問題