Element aktualizacji w elemencie produktu w połączeniu z odpowiednim zaplanowaniem akcji spowoduje odinstalowanie, którego szukasz. Pamiętaj, aby podać kody aktualizacji wszystkich produktów, które chcesz usunąć.
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="00000000-0000-0000-0000-000000000000">
<UpgradeVersion Minimum="1.0.0.0" Maximum="1.0.5.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
Pamiętaj, że jeśli jesteś ostrożny ze swoimi kompilacjami, możesz zapobiec przypadkowemu zainstalowaniu starszej wersji Twojego produktu na nowszej. Do tego służy pole Maximum. Kiedy budujemy instalatory, ustawiamy UpgradeVersion Maximum do tworzonej wersji, ale IncludeMaximum = „no”, aby zapobiec temu scenariuszowi.
Masz do wyboru harmonogram planowania RemoveExistingProducts. Wolę zaplanować to po InstallFinalize (niż po InstallInitialize, jak zalecili inni):
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
Pozostawia to poprzednią wersję produktu zainstalowaną do momentu skopiowania nowych plików i kluczy rejestru. To pozwala mi migrować dane ze starej wersji do nowej (na przykład zmieniłeś przechowywanie preferencji użytkownika z rejestru na plik XML, ale chcesz być uprzejmy i migrować ich ustawienia). Ta migracja jest wykonywana w odroczonej akcji niestandardowej tuż przed InstallFinalize.
Kolejną korzyścią jest wydajność: jeśli istnieją niezmienione pliki, Instalator Windows nie zawraca sobie głowy kopiowaniem ich ponownie, gdy planujesz po InstallFinalize. Jeśli planujesz po InstallInitialize, poprzednia wersja jest najpierw całkowicie usuwana, a następnie instalowana jest nowa wersja. Powoduje to niepotrzebne usuwanie i ponowne kopiowanie plików.
Aby zapoznać się z innymi opcjami planowania, zobacz temat pomocy RemoveExistingProducts w MSDN. W tym tygodniu link to: http://msdn.microsoft.com/en-us/library/aa371197.aspx