我知道必须有一种方法可以让读/写的应用程序/用户设置对所有用户都相同。我为工厂安装的自动激光打标机编写代码。我希望代码像
一样简单 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。
答案 0 :(得分:2)
不会自动喜欢user.config
或app.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);
}
您将使用自定义设置类,就像使用普通设置类一样。
答案 1 :(得分:0)
我提出的解决方案是使用EF和SQLite存储我的应用程序的所有设置。这样我就可以从DB加载到Model并将DB文件存储到我想要的任何位置。此外,我获得了SQL的结构和组织,可以跳过XML文件的所有序列化。此外,DB文件不是纯文本,我可以使用记事本限制未经授权的用户更改设置。