Я создал класс, производный от System.Configuration.Install для своего установщика. Но код в Uninstall () вызывается, когда я пытаюсь обновить приложение. Как я могу определить, что пользователь пытается обновить, а не удалить?
Может быть, эта почта объясняет это лучше, чем я:
My problem boils down to: when the user performs an update (i.e. double clicks on MyAppVer2.msi when they already have MyAppVer1.msi installed) the Uninstall method inside my Installer is called first, but I have no apparent property to check from inside this method to detect that an update is being performed so that I can branch my code appropriately.





Слепое предположение здесь, но я бы начал с проверки свойства Установщик.Контекст на наличие параметр. Если это не поможет, возможно, что-то есть в параметре savedState, переданном в Удалить.
Последним шансом было бы подсказывать пользователю и установить дочерние установщики как соответствующие.
Тогда я подозреваю, что вам просто нужно будет попросить пользователя или выпустить оболочку для InstallShield или что-то в этом роде. Было много жалоб на то, как плохой .NET поддерживает MSI, но никто не планирует исправлять это AFAIK.
Проект развертывания, поставляемый с Visual Studio, ЧЕМПИОННО неспособен справиться с чем-либо, кроме самых простых сценариев.
В вашем случае вам нужно будет сделать одно из следующего:
В вашем проекте установки есть параметр, который по умолчанию будет «удалять» предыдущие версии, выключите этот флаг, и вам не о чем будет беспокоиться!
Когда эта опция выключена, когда я смотрю Панель управления -> Установка и удаление программ, я вижу различные записи. По одному на каждую установленную мной версию.
Да, это ошибка установщика Windows. Как уже упоминалось в других плакатах, вы хотели бы взглянуть на другие решения ... Я просто знаю, что этот вариант является единственным допустимым обходным путем с функциональностью по умолчанию.
Есть ли причина, по которой вы не можете использовать WIX, который может справляться с подобными вещами более эффективно, посмотрите руководство по обновлению, Здесь
Спасибо. В Installer.Context или savedState нет ничего полезного.