2

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

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

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 表单)。我怎么知道是否有以前的版本?

4

3 回答 3

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.

于 2012-05-02T17:21:45.347 回答
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() 来获取用户设置。

于 2012-05-02T09:57:41.887 回答
0

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

于 2012-05-02T09:48:09.103 回答