【问题标题】:User Settings for all users所有用户的用户设置
【发布时间】:2014-02-25 20:04:51
【问题描述】:

我知道必须有一种方法让应用程序/用户设置可以读/写并且对所有用户都相同。我为安装在工厂中的自动激光打标机编写代码。我希望代码尽可能简单

        private void _btnApply_Click(object sender, EventArgs e)
    {
        Settings.Default.IOCOM = comboIOCOM.Text;
        Settings.Default.TLoc = tbTLoc.Text;
        Settings.Default.Save();
    }

但我不希望 .config 文件保存在每个用户的文件夹中。我希望所有用户都使用相同的设置。

回答时要记住的是,将登录的用户将拥有 c:\ 和所有文件夹的管理员权限

另外,我正在使用 VS 2010。

【问题讨论】:

  • 难道你不能去掉它是一个按钮的事实,然后将你想要的设置硬编码到代码中吗?这样,无论谁运行应用程序,他们都无法更改任何内容。

标签: c#


【解决方案1】:

不会自动像user.configapp.config。但是这样做的方法是使用Environment.GetFolderPath( 找到CommonApplicationData 文件夹。

//Finding the file
var commonPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
var programPath = Path.Combine(commonPath, "Your Programs Name");
var settingFile = Path.Combine(programPath, "settings.xml");



//Saving settings
Directory.CreateDirectory(programPath);
var serializer = new XmlSerializer(typeof(YourCustomSettingsType));
using(var fs = File.Open(settingFile, FileMode.Create))
{
    serializer.Serialize(fs, yourCustomSettings);
}


//loading settings
try
{
    var serializer = new XmlSerializer(typeof(YourCustomSettingsType));
    using(var fs = File.Open(settingFile, FileMode.Open))
    {
        yourCustomSettings = (YourCustomSettingsType)serializer.Deserialize(fs);
    }
}
catch
{
    //If it fails to load just use the default settings (set in the constructor)
    yourCustomSettings = new YourCustomSettingsType();

    //Save the settings out so it won't fail next time.
    SaveSettings(yourCustomSettings);
}

您可以像使用普通设置类一样使用自定义设置类。

【讨论】:

  • 您能给我举个例子,说明 xml 文件的外观以及如何在代码中使用 xml 中的值吗?
  • 我还会使用这样的设置吗 spIO.PortName = Settings.Default.IOCOM; ?
  • @bkjames 对于您的第一个问题,它看起来很像 user.config 或 app.config 因为这正是它的作用。对于默认设置,您也可以这样做,但就像我说的那样,它不是自动的,因此您需要自己创建设置并将其加载到 Default 属性中。在您的一个已经具有用户或应用程序设置的项目中查看Settings.Designer.cs,以了解它如何处理该属性,这将取决于您在ApplicationSettingsBase 中重新创建代码。到目前为止,我给你的代码还不是一个完整的解决方案,但旨在帮助你朝着正确的方向前进。
  • 感谢您的帮助
  • @bkjames 发现我上面的代码无法处理。 Directory.CreateDirectory(programPath); 步骤可能会创建一个只有创建该目录的用户才能读取的新文件夹。如果发生这种情况,您将需要在创建该文件夹时更改该文件夹的权限,以允许所有用户访问该文件夹。如果您需要帮助,请随时提出有关更改文件夹权限的新问题。
【解决方案2】:

我想出的解决方案是使用 EF 和 SQLite 来存储我的应用程序的所有设置。这样我可以从数据库加载到模型并将数据库文件存储到我希望的任何位置。我还获得了 SQL 的结构和组织,并且可以跳过 XML 文件的所有序列化。此外,数据库文件不是纯文本,我可以限制未经授权的用户使用记事本更改设置。

【讨论】:

    猜你喜欢
    • 2017-12-03
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    相关资源
    最近更新 更多