Как я могу сохранить настройки программы?

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

Программа будет часто использовать эти настройки, поэтому я хотел бы кэшировать настройки в файле на ПК, чтобы не приходилось постоянно обращаться к серверу. Настроек очень много. Я думал о том, чтобы сохранить их в файле XML, но мне нужно, чтобы файл не читался пользователями ПК.

Как мне сохранить настройки на ПК, на котором программа может читать и писать, но пользователь не может читать?

РЕДАКТИРОВАТЬ: Извините, ребята. Приложение пишется на C # с использованием .NET 2.0. Приложение будет работать только в Windows. Это консольное приложение, которое будет работать как служба Windows.


person modernzombie    schedule 04.12.2009    source источник
comment
Язык программирования? Операционная система? Давай, дай нам шанс! :)   -  person Carl Smotricz    schedule 04.12.2009
comment
Какой объем? Вам нужны настройки для каждой машины или пользователя?   -  person FrustratedWithFormsDesigner    schedule 04.12.2009
comment
Почему вы хотите запретить пользователю просматривать или изменять настройки?   -  person Anon.    schedule 04.12.2009
comment
Не хочу слышать, потому что в настройках указан суперсекретный пароль к серверу!   -  person Carl Smotricz    schedule 04.12.2009
comment
Это приложение для работодателей. Пользователи будут сотрудниками. Работодатель сможет изменить настройки через веб-интерфейс, который будет управлять всеми настройками в сети машин. Файл на ПК будет просто локальным кешем для этого ПК.   -  person modernzombie    schedule 04.12.2009
comment
Спасибо за обновления. Может ли пользователь получить права администратора?   -  person Carl Smotricz    schedule 04.12.2009
comment
Если это для корпоративных настроек, просто сохраните файл настроек в каталоге программных файлов или в реестре, где у пользователей нет доступа на запись.   -  person Anon.    schedule 04.12.2009
comment
Если это веб-приложение, почему настройки просто не сохраняются в веб-приложении, где их относительно легко сохранить в безопасности? Тогда единственной настройкой, которая потребуется на пользовательских ПК, будет идентификация пользователя (что, надеюсь, не является большим секретом для пользователя).   -  person Carl Smotricz    schedule 04.12.2009
comment
@Carl, пользователь не должен иметь права администратора. Также это приложение для ПК, но некоторые настройки хранятся на веб-сервере, потому что настройки могут применяться к сети ПК. Кроме того, он будет основан на подписке, поэтому необходимо немного контролировать настройки высокого уровня.   -  person modernzombie    schedule 04.12.2009
comment
Все это - еще одна причина хранить настройки в веб-приложении, а не на сервере. Но окей, вернемся к вопросу!   -  person Carl Smotricz    schedule 04.12.2009


Ответы (8)


Если приложение является службой, оно может работать под учетной записью, которая не принадлежит пользователю; тогда достаточно легко скрыть файл от него.

В качестве приложения для Windows у вас есть выбор: реестр, файл или локальная база данных. Для файлов - на ваш выбор простой файл свойств или файл XML.

Для любого из них, на ваш выбор, зашифровано (на всякий случай) или нет.

person Carl Smotricz    schedule 04.12.2009

Предполагая, что вы ориентируетесь на платформу Windows, вы можете либо

  • использовать реестр
  • использовать файл конфигурации
  • или используйте базу данных

При необходимости данные могут быть зашифрованы во всех трех случаях. Если у вас действительно много настроек, реестр, вероятно, не самый простой способ сделать это. Если у вас есть приложение .net, обратите внимание на SQL Server Compact Edition, он действительно легкий, легко развертывается с вашим приложением и не требует среды выполнения.

person cdonner    schedule 04.12.2009

Если он находится на машине конечных пользователей, рано или поздно они смогут его прочитать. Если программа запущена на их локальном компьютере, они могут заставить ее делать все, что захотят. Если это какая-то программа клиент-сервер, вы просто никогда не сможете доверять тому, что говорит клиент.

Один из самых простых способов сохранить настройки в .Net - создать класс, содержащий все, что вы хотите отслеживать, а затем сериализовать его на диск и с диска. Поскольку этот файл просто действует как кеш, вы, вероятно, можете просто использовать Binary Formatter, который сделает файл доступным для чтения только тем, кто знает, что они делают.

Обязательно сохраните настройки в удобном для UAC каталоге, например ApplicationData.

person Chris Pitman    schedule 04.12.2009
comment
Крис, мне нравится ваша идея, но я, вероятно, все же зашифрую данные. Спасибо. - person modernzombie; 04.12.2009

вы можете написать конфигурацию приложения в xml, как это

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="Test1" value="My value 1" />
        <add key="Test2" value="Another value 2" />
    </appSettings>
</configuration>
person birrer    schedule 04.12.2009

Независимо от того, храните ли вы эти настройки локально, если вы загрузите их в память, пользователь сможет их прочитать. Если вы передаете их по сети, довольно просто сканировать сетевые пакеты, даже через зашифрованное соединение существует множество инструментов, которые будут посредничать в вашем собственном сетевом соединении (для этого я использовал OpenSTA). , хотя и не совсем для этого). Тот, кто действительно, действительно хочет увидеть, что вы используете для настроек, сможет увидеть их, если вы что-то запускаете на их компьютере.

Сказав это, хранение их в XML и простое шифрование файла, вероятно, является самым простым решением. Даже простое сжатие файла и изменение расширения отпугнет людей, которым просто интересно, какие у вас настройки.

person tloach    schedule 04.12.2009

Настройки в C # .net довольно просты. Создать файл настроек можно на страницах свойств проекта (вкладка «Настройки»). Затем, если вы действительно хотите, вы можете взять файл настроек и зашифровать корень xml с симметричными или асимметричными ключами

Затем, как уже упоминали другие, другая проблема - удержание ключей и подпрограмм для редактирования настроек из рук пользователя. Вы можете отправить настройки на сервер, на котором существует закрытый ключ, сохраняя только открытый ключ на клиенте для дешифрования, пусть сервер выполняет шифрование / подпись. Любое вмешательство в настройки клиента вы можете знать, потому что подпись не сработает. Итак, если у вас есть локально сохраненные настройки, пользователь не сможет их прочитать без небольшого кода, и вы можете только расшифровать их, чтобы использовать; запись / создание будет выполняться сервером.

person Dave T.    schedule 04.12.2009

Ваша идея конфигурации xml - хорошее начало (XML DOM прост в навигации, хорошо известен, документирован и т. Д.).

Если вы не хотите, чтобы пользователь мог читать / редактировать настройки, вы можете сохранить их в памяти, но вы потеряете данные от запуска к запуску. Похоже, вы не указали, что приложение будет перезапущено, поэтому это может сработать для вас. Существует также возможность определить, когда приложение закрывается, и затем вы можете сбросить кеш-память на диск.

person Ragepotato    schedule 04.12.2009

Вы обеспокоены тем, что пользователи читают файл или изменяют его?

В любом случае - вы можете зашифровать его случайным ключом и похоронить ключ где-нибудь в реестре.

person mfeingold    schedule 04.12.2009