Каков наилучший подход к развертыванию приложений WPF с локальной базой данных?

  • Я хочу создать приложение WPF, которое существует в одном каталоге, включая все необходимые ему файлы: .exe, .mdf база данных, .xml файлы конфигурации и т. Д.
  • приложение должно работать независимо от того, в каком каталоге оно находится, чтобы оно поддерживало этот сценарий:
    • человек 1 выполняет заявление в c:\temp\wpftool.exe
    • приложение читает и пишет в c:\temp\wpftool.mdf база данных
    • человек 1 заархивирует этот каталог и отправит его человеку 2 по электронной почте
    • человек 2 расстегивает молнию на c:\Users\jim\documents\checkout\wpftool.exe приложение читает и записывает в ту же базу данных в этом каталоге (c:\Users\jim\documents\checkout\wpftool.mdf)
    • человек 2 снова заархивирует каталог и отправляет его обратно человеку 1, чтобы продолжить вносить в него изменения

Каков наилучший способ создания приложения WPF, поддерживающего описанный выше сценарий?, учитывая:

  • не должно быть жестко закодированных строк подключения к базе данных
  • Каков наилучший метод развертывания, нажмите один раз? или просто скопируйте файл.exe из каталога /release?
  • разумная безопасность, чтобы пользователи могли входить в систему на основе паролей в базе данных, и, если случается, что третье лицо перехватывает электронную почту, он не может легко просмотреть данные в базе данных

2 ответа

Некоторые моменты на стороне базы данных:

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

Определите "разумную безопасность". Любой файл базы данных, который я получаю, я могу открыть, просмотреть и в конечном итоге выяснить (зависит от того, насколько неясным является содержимое). Можете ли вы запутать свои данные, например, используя таблицу "А" вместо "Клиент"? Вы действительно хотите? Наилучшая возможная защита включает в себя шифрование данных, и управление ими - и, в частности, ключами шифрования - может быть довольно сложным предметом, в зависимости от того, насколько "безопасным" вы хотите, чтобы ваши данные были.

Что касается базы данных, я хотел бы изучить возможность использования экземпляра пользователя в SQL Express. В сочетании с |DataDirectory| поддержка строки подстановки позволяет очень легко подключить ваше приложение.

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

Другие вопросы по тегам