检查以前的应用程序版本

时间:2012-05-02 09:32:14

标签: c#

我想在我的应用程序中显示一个新的表单。但是,我需要检测它是新安装还是升级。

我正在使用以下代码升级设置:

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表格)。我如何知道是否有以前的版本?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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()来获取用户设置。

答案 2 :(得分:0)

尝试使用全局可访问资源,例如系统注册表。 将当前“已安装”(如果是独立的,未实际安装的)版本号放置在某个地方,其他任何程序都可以读取它。