Различение между удалением / установкой и обновлением приложения - PullRequest
7 голосов
/ 25 октября 2010

Итак, у меня есть это приложение, для которого мы производим версии для дальнейшей разработки.

Если приложение удаляется пользователем (скажем, из раздела «Установка и удаление программ»), я хочу, чтобы приложение удалило определенную папку в файловой системе, которая содержит информацию, связанную с приложением.

Однако, если приложение будет обновлено (загрузив более новый установщик для этого приложения и установив его), я хочу, чтобы оно сохранило эту папку.

У меня сложилось впечатление (на данный момент), что невозможно провести различие между удалением / установкой и просто обновлением приложения с одной версии на другую, поскольку проекты развертывания .NET рассматривают обновление как просто другую процедуру удаления / установки , но это должно быть как-то возможно.

Спасибо, что нашли время и за любые ответы, которые я могу получить.

Ответы [ 6 ]

2 голосов
/ 26 октября 2010

Установщик имеет три кода GUID, ProductCode, PackageCode и UpgradeCode, которые вы можете использовать для управления этими сценариями: UpgradeCode подобен идентификатору приложения и не должен меняться между версиями; PackageCode идентифицирует выпуск вашей установки, а ProductCode идентифицирует выпуск вашего программного обеспечения. Вы можете изменить ProductCode, увеличив значение ProductVersion.

Windows использует ProductCode, чтобы увидеть, установлено ли приложение в системе. Если вы переустанавливаете программу установки с тем же ProductCode и PackageCode, вы получаете опцию Repair / Uninstall.

1 голос
/ 26 октября 2010

Это не прямой ответ, но вы рассматривали возможность использования стороннего программного обеспечения для установки?Мы используем InnoSetup для распространения приложения .Net, и мы находим его довольно простым в использовании и очень гибким.Это, безусловно, может справиться с тем, что вы описываете.

0 голосов
/ 27 октября 2010

В конце концов я также нашел способ проверить, обновляется ли приложение или это новая установка:

  • Приложение оставляет некоторую информацию о себе в реестре (имя приложения,номер версии и т. д.).Обычно это хранится в

LocalMachine \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {GUID приложения}

Когда приложение удаляется, эта информацияудален.

  • Но вы можете проверить эту информацию при установке версии своего приложения (это можно сделать, добавив некоторые пользовательские действия в проект развертывания).Я проверяю его по методу BeforeInstall и ищу в реестре значение DisplayVersion , например:


RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{AppGUIDHere}");
string version = (string)regKey.GetValue("DisplayVersion");

  • Это значение будет содержать версию, установленную на вашем компьютере.Если эта установленная версия меньше, чем версия приложения, которое вы пытаетесь установить, то вы следуете логическому пути ОБНОВЛЕНИЕ

  • Если вы не можете найти что-либо в реестре под этимключ, это означает, что это новая установка (другого приложения, кроме этого, установленного на компьютере, нет).И здесь вы следуете другому логическому пути простой установки

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 26 октября 2010

Вы также можете попробовать добавить какое-нибудь пользовательское действие предустановки, которое копирует указанную папку во временную папку, а затем действие после установки копирует его обратно на место. Но, пожалуйста, сначала рассмотрите вышеупомянутые предложения, такие как использование более мощного установщика, или нажмите кнопку «Раз».

0 голосов
/ 26 октября 2010

Использование установщика wix позволит вам сделать это различие. Это более практический подход, но он будет работать.

0 голосов
/ 26 октября 2010

Вы пробовали использовать развертывание ClickOnce? Он обрабатывает все установки и обновления приложения. Изменяя статус публикации файлов, включенных в обновление, вы можете контролировать, будет ли файл перезаписан обновлением или останется прежним. Когда приложение будет удалено, все файлы будут удалены.

...