Как я могу сохранить настройки программы? - PullRequest
2 голосов
/ 04 декабря 2009

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

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

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

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

Ответы [ 8 ]

3 голосов
/ 04 декабря 2009

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

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

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

2 голосов
/ 04 декабря 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>
2 голосов
/ 04 декабря 2009

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

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

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

2 голосов
/ 04 декабря 2009

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

Как приложение для Windows, вы можете выбрать реестр, файл или локальную базу данных. Для файлов вы выбираете простой файл свойств или файл XML.

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

1 голос
/ 04 декабря 2009

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

.

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

1 голос
/ 04 декабря 2009

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

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

1 голос
/ 04 декабря 2009

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

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

0 голосов
/ 04 декабря 2009

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

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

...