Я сам прошел через это, и это была боль.Мы используем VS 2005 для создания наших MSI, и по какой-то причине я случайно изменил код обновления в последнем выпуске.Это привело к тому, что программа дважды отображалась в диалоговом окне «Установка и удаление программ», несмотря на установленный флаг RemovePreviousVersions.Я обнаружил, что мне пришлось отредактировать таблицу обновлений, чтобы добавить запись для кода обновления румян.
Этот процесс должен быть проще для вас с InstallShield, но я включу инструкции VS, которые мне пришлось использовать тольков случае.
В VS 2005 у вас нет доступа для редактирования таблицы обновлений (по крайней мере, я не смог ее найти), поэтому мне пришлось установить программу под названием Microsoft Orca (MS имеет несколько классных кодовых имен,но названия продуктов ужасные).Он поставляется вместе с Windows SDK, поэтому он уже был у меня на компьютере.Вот ссылка: http://msdn.microsoft.com/en-us/library/aa370557%28v=vs.85%29.aspx
Откройте файл MSI в этой программе, и вы увидите Upgrade в нижней части списка.Вы должны добавить новую запись для кода обновления, с которым хотите иметь дело.Вот ссылка, объясняющая это: http://msdn.microsoft.com/en-us/library/aa372379%28VS.85%29.aspx
Я создал новую строку с кодом обновления, который я хотел удалить, с правильными номерами версий, с атрибутом 4 (msidbUpgradeAttributesIgnoreRemoveFailure) и ActionProperty PREVIOUSVERSIONSINSTALLED.
Если я правильно понимаю, я в основном сказал MSI, что вместе с флагом RemovePreviousVersions он будет рассматривать этот другой код обновления и удалять его.В моем случае это сработало, так что, надеюсь, что-то из этого вам поможет.
Удачи!