2010-05-04 2 views
7

У меня есть приложение, которое должно хранить данные. В настоящее время я использую встроенные параметры приложения, но это дает мне только два варианта: приложение и пользовательские области. В идеале, я хочу «локальную» область, которая позволяет приложению запускаться под другим пользователем и все еще находить ее данные, а не воссоздавать ее для этого пользователя. Область приложения может это сделать, но она доступна только для чтения. Пользовательские данные будут изменены пользователем. Это нормально, если только администратору разрешено вносить изменения в данные.Где я должен хранить данные приложения?

Как вы, наверное, можете догадаться, у меня есть инструмент администрирования, который позволяет пользователю изменять данные и бегун службы Windows, который считывает данные и что-то делает с ним. Было бы здорово, если бы бегун службы Windows получал доступ к данным, созданным средством администрирования.

+0

Какие данные вы храните? Пользовательские настройки и т. Д. Или данные, используемые приложением? – gooch

+0

Я храню невероятно простые данные. Почти никогда не будет ситуации, когда хранится более 10 объектов. Данные - это настройки задачи (например, имя, каталог, плагин для использования и т. Д.), Которые будут выполняться в службе, которая будет существовать вне моего инструмента администрирования. Крайне важно, чтобы служба могла найти эту информацию. Настройки были бы идеальными, но доступ к нему из службы, похоже, будет затруднен. Как мне это сделать? –

ответ

7

Если данные очень , очень просто, и вам нужно, чтобы это было доступно для чтения другими приложениями или пользователями (с соответствующими разрешениями), я бы, вероятно, захотел сохранить его в файле XML или даже в текстовом файле внутри папки данных приложения пользователя, что было бы полученных через Environment.GetFolderPath. Пример сохранения может выглядеть так:

using System.IO; 
using System.Xml.Linq; 

string settingsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
if (!Directory.Exists(settingsDirectory)) 
    Directory.CreateDirectory(settingsDirectory); 
string fileName = "tasks.xml"; 
string settingsPath = Path.Combine(settingsDirectory, fileName); 
XDocument settingsDoc = new XDocument(
    new XElement("Tasks", 
     new XElement("Task", 
      new XElement("Name", "Make Breakfast"), 
      new XElement("Location", @"C:\Program Files\MyApp\Plugins"), 
      new XElement("FileName", "breakfast.dll")))); 
// ... etc. 
settingsDoc.Save(settingsPath); 

Все права сохранены! Вы можете загрузить их снова XDocument.Load.

+0

Спасибо! Отлично. Есть ли способ сделать эту работу как settings.settings, где ее строго типизировали? Я хотел бы иметь возможность сделать что-то вроде этого: Settings.Default.Tasks = TaskList; Settings.Default.Save(); –

+0

@joe: Если это то, что вы хотите, вы должны изучить класс 'XmlSerializer' и пространство имен System.Xml.Serialization'. Вы можете использовать их для создания структуры классов и «автоматического» сериализации в/из XML. Вы определенно * не можете * сделать эту часть фактического объекта «Настройки»; если вы хотите использовать «Настройки», используйте «Настройки». Если вы просто хотите, чтобы это был одноэлементный объект, например 'Properties.Settings.Default', тогда это возможно, но вам придется реализовать шаблон самостоятельно. – Aaronaught

+0

О кстати. Должен ли я использовать папку CommonApplicationData вместо ApplicationData? В документации говорится: «Каталог, который служит в качестве общего репозитория для данных, специфичных для приложения, которые используются всеми пользователями». –

0

Похоже, что вы хотите сохранить его в базе данных, вопрос локальный или по сети или нет. Ответ также зависит от того, какие данные вы храните, как распределяется ваше приложение и другие факторы.

Да, и кстати, мы могли бы помочь вам лучше, если вы указываете вашу платформу (желательно с меткой) - Silverlight, WPF, WinForms, ASP.NET, консоли и т.д.

+0

Извините, я думал, что тег .NET достаточно для указания платформы. Во всяком случае, я думаю, что база данных может быть чрезмерной для моих потребностей в сохранении данных. Это будет приложение WPF. –

+0

ОК, .NET может охватывать все перечисленные мной платформы, а у меня нет. –

 Смежные вопросы

  • Нет связанных вопросов^_^