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);。欠点は、以前のバージョンで必要な設定があったことです (ただし、私の場合は問題ではありません。最初のバージョンでも少なくとも1 つの設定がありました)。

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

これは、アプリケーションの新しいバージョンごとにアセンブリバージョンを更新することで機能するはずです。私の例のバージョン比較は明らかに非常に単純であり、ダウングレードした場合とアップグレードした場合でも、新着情報が表示されますが、修正するのは簡単です。

編集:いくつかの問題を修正するためにコードを更新しました。基本的に、古いバージョン番号を取得する前に、Properties.Settings.Default.Upgrade()を呼び出してユーザー設定を取得します。

于 2012-05-02T09:57:41.887 に答える
0

システム レジストリなど、アクセス可能なグローバル リソースを使用してみてください。現在「インストールされている」(スタンドアロンの場合、実際にはインストールされていない)バージョン番号を、他のプログラムが読み取れる場所に配置します。

于 2012-05-02T09:48:09.103 に答える