องค์ประกอบอัปเกรดภายในองค์ประกอบผลิตภัณฑ์รวมกับกำหนดการที่เหมาะสมของการดำเนินการจะทำการถอนการติดตั้งหลังจากคุณ อย่าลืมระบุรหัสอัพเกรดของผลิตภัณฑ์ทั้งหมดที่คุณต้องการลบ
<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>
โปรดทราบว่าหากคุณระมัดระวังงานสร้างของคุณคุณสามารถป้องกันไม่ให้ผู้อื่นติดตั้งผลิตภัณฑ์รุ่นเก่ากว่าโดยบังเอิญผ่านเครื่องรุ่นใหม่ นั่นคือสิ่งที่ฟิลด์สูงสุดมีไว้สำหรับ เมื่อเราสร้างตัวติดตั้งเราตั้งค่า UpgradeVersion Maximum เป็นรุ่นที่สร้างขึ้น แต่ IncludeMaximum = "no" เพื่อป้องกันสถานการณ์นี้
คุณมีตัวเลือกเกี่ยวกับการกำหนดตารางเวลาของ RemoveExistingProducts ฉันชอบการจัดตารางเวลาหลังจาก InstallFinalize (แทนที่จะเป็น InstallInitialize ตามที่คนอื่น ๆ แนะนำ):
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
สิ่งนี้จะทำให้ผลิตภัณฑ์รุ่นก่อนหน้าติดตั้งไว้จนกว่าจะคัดลอกไฟล์และรีจิสตรีคีย์ใหม่ สิ่งนี้ช่วยให้ฉันย้ายข้อมูลจากเวอร์ชันเก่าไปเป็นใหม่ (ตัวอย่างเช่นคุณเปลี่ยนที่เก็บข้อมูลค่ากำหนดผู้ใช้จากรีจิสทรีเป็นไฟล์ XML แต่คุณต้องการสุภาพและโอนย้ายการตั้งค่า) การโอนย้ายนี้กระทำในการกระทำที่กำหนดเองรอการตัดบัญชีก่อน InstallFinalize
ข้อดีอีกอย่างคือประสิทธิภาพ: หากมีไฟล์ไม่เปลี่ยนแปลง Windows Installer จะไม่คัดลอกไฟล์อีกต่อไปเมื่อคุณกำหนดเวลาหลังจาก InstallFinalize หากคุณกำหนดเวลาหลังจาก InstallInitialize เวอร์ชันก่อนหน้านี้จะถูกลบออกก่อนจากนั้นจึงติดตั้งเวอร์ชันใหม่ ส่งผลให้มีการลบและการจัดเรียงไฟล์ใหม่โดยไม่จำเป็น
สำหรับตัวเลือกการตั้งเวลาอื่น ๆ โปรดดูหัวข้อวิธีใช้ RemoveExistingProducts ใน MSDN สัปดาห์นี้การเชื่อมโยงคือ: http://msdn.microsoft.com/en-us/library/aa371197.aspx