2012-05-02 3 views
2

Я хочу показать новую форму в своем приложении. Однако мне нужно определить, будет ли это новая установка или обновление.Проверка предыдущей версии приложения

Я использую следующий код для обновления параметров:

if (Properties.Settings.Default.settingsUpgrade) 
{ 
    WhatsNew WhatsNew = new WhatsNew(); 
    WhatsNew.Show(); 
    WhatsNew.BringToFront(); 

    Properties.Settings.Default.Upgrade(); 
    Properties.Settings.Default.settingsUpgrade = false; 
    Properties.Settings.Default.Save();     
} 

Properties.Settings.Default.settingsUpgrade установлен в True по умолчанию. Однако этот код будет выводить форму Whats New всегда, даже с новой установкой.

У Properties.Settings.Default.Upgrade(); нет события или что-то, что срабатывает, когда обновление действительно необходимо, поэтому я понятия не имею, была ли предыдущая версия (и, следовательно, показана форма Whats New). Как узнать, была ли предыдущая версия?

+0

Возможно, мы не можем получить эту информацию без использования системного реестра ОС. – Rahul

ответ

2

Я сделал это, используя GetPreviousVersion(string property);. Недостатком является то, что в предыдущей версии была настройка, однако в моем случае это не проблема - даже первая версия имела atleast одна настройка).

if (Properties.Settings.Default.settingsUpgrade) 
{ 
    Object PrevVersion = Properties.Settings.Default.GetPreviousVersion("tooltipDisplay"); 
    if (PrevVersion != null) 
    { 
     WhatsNew WhatsNew = new WhatsNew(); 
     WhatsNew.Show(); 
     WhatsNew.BringToFront(); 

     Properties.Settings.Default.Upgrade(); 
     Properties.Settings.Default.settingsUpgrade = false; 
     Properties.Settings.Default.Save(); 
    } 
} 

Этот код проверяет, есть ли предыдущая конфигурация найдена, и если объект PrevVersion не будет установлен в null.

+0

Начиная с VS2015, 'GetPreviousVersion()' генерирует исключение, если указанный параметр не найден. – dotNET

0

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

1

Вы можете попробовать создать настройку под названием currentVersion, которая начинается как пустая и сравнивает ее с текущей версией сборки вашего приложения. Что-то вроде этого:

if (Properties.Settings.Default.settingsUpgrade) 
     { 
      Properties.Settings.Default.Upgrade(); 

      string strVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
      string installedVersion = Properties.Settings.Default.installedVersion; 

      if (!string.IsNullOrEmpty(installedVersion) && installedVersion != strVersion) 
      { 
       WhatsNew WhatsNew = new WhatsNew(); 
       WhatsNew.Show(); 
       WhatsNew.BringToFront(); 
      } 

      Properties.Settings.Default.installedVersion = strVersion; 
      Properties.Settings.Default.settingsUpgrade = false; 
      Properties.Settings.Default.Save(); 
     } 

Это должно работать, если вы обновите версию сборки для каждой новой версии приложения. Сравнение версий в моем примере, очевидно, очень простое, а также приведет к тому, что What's New будет отображаться, если они будут понижены, а также если они будут обновлены, но это должно быть легко исправить.

Редактировать: Я обновил код, чтобы исправить некоторые проблемы. В основном, вызывая Properties.Settings.Default.Upgrade(), чтобы получить пользовательские настройки, прежде чем пытаться получить старую версию.

+0

С помощью этого кода я до сих пор не знаю, если это новая установка или обновление. Поскольку 'Properties.Settings.Default.currentVersion' всегда пуста каждая новая версия. – Devator

+0

Какова область действия набора настроек? Если он настроен на приложение, я считаю, что его изменение на пользователя (так что оно сохраняется для каждого пользователя, а не для каждого приложения) должно разрешить это. – StevenR

+0

Это у пользователя. Однако 'Property.Settings.Default.currentVersion' всегда пуст (даже если вы использовали предыдущую версию), поэтому вам нужно будет вызвать' Properties.Settings.Default.Upgrade(); ', чтобы захватить содержимое старой конфигурации файлы и сохранить их в качестве текущего. – Devator

Смежные вопросы