2

我正在使用Properties.Settings该类来保存应用程序设置。我想知道,一旦我在客户端系统中部署,设置是否会在应用程序重启和系统重启时保存。

考虑以下场景:

部署应用程序后,用户将通过 UI 将手机号码保存为

电话:1xxxx - 45678

现在,我将电话号码另存为

 Properties.Settings.Default.ClientPhone = this.PhoneText.Text;
 Properties.Settings.Default.Save();

我是否理解,电话号码将跨 app.restarts 和重新启动保存在应用程序中?

4

3 回答 3

3

这是关于应用程序和用户设置的区别。应用程序设置是只读的。用户设置永久存储在每个用户的基础上。您的代码正是更改和保存用户设置所需要的

请注意:由于它们被称为“用户设置”,它们将为机器上的每个用户单独存储!您不能使用默认的 .NET 设置机制创建对所有用户都相同的可变设置。

不要重新发明轮子!使用 .NET 设置机制 - 你在你的例子中做对了:-)

于 2012-12-06T10:30:08.367 回答
2

这可以正常工作,但是要记住的一件事是,如果您安装新版本的程序,它将“丢失”旧设置(因为这些设置特定于您的程序的特定版本)。(“版本”是指 AssemblyVersion)

幸运的是,您可以通过在 Main() 开始处或附近调用以下函数来处理此问题。为此,您需要添加一个名为 NeedSettingsUpgrade 的新布尔设置属性并将其默认为“true”:

/// <summary>Upgrades the application settings, if required.</summary>

private static void upgradeProgramSettingsIfNecessary()
{                                                        
    // Application settings are stored in a subfolder named after the full #.#.#.# version
    // number of the program. This means that when a new version of the program is installed,
    // the old settings will not be available.
    //
    // Fortunately, there's a method called Upgrade() that you can call to upgrade the settings
    // from the old to the new folder.
    //
    // We control when to do this by having a boolean setting called 'NeedSettingsUpgrade' which
    // is defaulted to true. Therefore, the first time a new version of this program is run, it
    // will have its default value of true.
    //
    // This will cause the code below to call "Upgrade()" which copies the old settings to the new.
    // It then sets "NeedSettingsUpgrade" to false so the upgrade won't be done the next time.

    if (Settings.Default.NeedSettingsUpgrade)
    {
        Settings.Default.Upgrade();
        Settings.Default.NeedSettingsUpgrade = false;
    }
}
于 2012-12-06T10:34:07.880 回答
1

一个快速的谷歌应该已经为你完成了。

是的,他们会根据 msdn:.NET allows you to create and access values (settings) that are persisted between application execution sessions.

http://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

于 2012-12-06T10:28:42.443 回答