2012-05-02 30 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默认。但是,即使使用新的安装,此代码也会始终显示新增内容。

Properties.Settings.Default.Upgrade();没有一个事件或者什么是在需要升级时触发的,所以我不知道是否有以前的版本(并因此显示Whats New表单)。我怎么知道是否有以前的版本?

+0

可能我们无法使用系统操作系统注册表获取该信息。 – Rahul

回答

2

我已经使用GetPreviousVersion(string property);完成了这项工作。缺点是在以前的版本中需要一个设置(但在我的情况下,这不是一个问题 - 即使第一个版本至少有一个设置)。

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(); 
     } 

这应该工作,让你更新每个新版本的应用程序的程序集版本。 我的示例中的版本比较显然非常简单,并且如果降级以及升级,还会导致显示新增内容,但应该直接解决该问题。

编辑:我更新了代码来解决一些问题。基本上,在尝试获取旧版本号之前,先调用Properties.Settings.Default.Upgrade()来获取用户设置。

+0

有了这段代码,我仍然不知道它是全新安装还是升级。由于'Properties.Settings.Default.currentVersion'每个新版本都是空的。 – Devator

+0

设置的范围是什么?如果它设置为应用程序,我认为将其更改为用户(因此它是按用户存储的而不是按应用程序存储的)应该可以解决此问题。 – StevenR

+0

它在用户。然而'Properties.Settings.Default.currentVersion'总是空的(即使你使用了以前的版本),因此你需要调用'Properties.Settings.Default.Upgrade();'获取旧配置的内容文件并将它们保存为当前文件。 – Devator

相关问题