Ürün öğesinin içindeki Yükseltme öğesi, eylemin uygun şekilde planlanmasıyla birleştirildikten sonra kaldırma işlemini gerçekleştirir. Kaldırmak istediğiniz tüm ürünlerin yükseltme kodlarını listelediğinizden emin olun.
<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>
Yapılarınıza dikkat ederseniz, insanların yanlışlıkla ürününüzün eski bir sürümünü daha yenisine yüklemelerini engelleyebileceğinizi unutmayın. Maksimum alanı bunun içindir. Yükleyiciler oluşturduğumuzda, UpgradeVersion Maximum'u oluşturulmuş sürüme ayarlıyoruz, ancak bu senaryoyu önlemek için IncludeMaximum = "no" değerini ayarladık.
RemoveExistingProducts zamanlaması ile ilgili seçenekleriniz var. Ben InstallFinalize sonra (diğerleri tavsiye gibi InstallInitialize sonra) zamanlama tercih:
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
Bu, yeni dosyalar ve kayıt defteri anahtarları kopyalanana kadar ürünün önceki sürümünü yükler. Bu, verileri eski sürümden yenisine taşımamı sağlar (örneğin, kullanıcı tercihlerinin depolanmasını kayıt defterinden bir XML dosyasına değiştirdiniz, ancak kibar olmak ve ayarlarını taşımak istiyorsunuz). Bu taşıma, InstallFinalize'dan hemen önce ertelenmiş bir özel eylemde yapılır.
Başka bir avantajı verimliliktir: değişmeyen dosyalar varsa, Windows Installer, InstallFinalize'dan sonra zamanladığınızda bunları tekrar kopyalamaktan rahatsız olmaz. InstallInitialize'dan sonra zamanlama yaparsanız, önce önceki sürüm tamamen kaldırılır ve ardından yeni sürüm yüklenir. Bu, dosyaların gereksiz şekilde silinmesine ve yeniden kopyalanmasına neden olur.
Diğer zamanlama seçenekleri için MSDN'deki RemoveExistingProducts yardım konusuna bakın. Bu hafta, bağlantı: http://msdn.microsoft.com/en-us/library/aa371197.aspx