Как обнаружить обновление с помощью .NET 2 System.Configuration.Install? - PullRequest
4 голосов
/ 02 октября 2008

Я создал класс, полученный из System.Configuration.Install для моего установщика.
Но код в Uninstall () вызывается, когда я пытаюсь обновить приложение.
Как я могу определить, что пользователь пытается обновить, а не удалить?

Может быть этот пост объясняет это лучше меня:

Моя проблема сводится к: когда пользователь выполняет обновление (т.е. дважды нажимает на MyAppVer2.msi, когда они MyAppVer1.msi уже установлен) метод удаления внутри моего Сначала вызывается установщик, но у меня есть нет очевидного свойства для проверки внутри этого метода, чтобы обнаружить, что обновление выполняется так, чтобы я может ветвить мой код соответствующим образом.

Ответы [ 4 ]

1 голос
/ 03 октября 2008

В вашем установочном проекте есть настройка, которая по умолчанию «удаляет» предыдущие версии, отключите этот флаг, и вам не о чем беспокоиться!

0 голосов
/ 03 октября 2008

Есть ли причина, по которой вы не можете использовать WIX, которая может более эффективно справляться с подобными вещами, взгляните на руководство по обновлению, Здесь

0 голосов
/ 02 октября 2008

Проект развертывания, поставляемый с Visual Studio, НАМЕРЕН недостаточно способен справиться с чем-либо, кроме простейших сценариев.

В вашем случае вам необходимо выполнить одно из следующих действий:

  1. Найдите способ установить флаг перед удалением исходного MSI, который вы можете проверить в классе установщика.
  2. Приглашение пользователя визуально в классе установщика.
  3. Переработайте логику установки / удаления, чтобы она не зависела от ситуации, в которой вызывался деинсталлятор.
0 голосов
/ 02 октября 2008

Слепое предположение здесь, но я бы начал с проверки свойства Installer.Context для параметра . Если это не поможет, возможно, в параметре saveState передано значение Uninstall .

.

Последний шанс будет запросить у пользователя и установить дочерние установщики как подходящие.

...