Интеграция SQLite с приложением Windows - PullRequest
1 голос
/ 03 июня 2011

Итак, я создал простое приложение WPF, которое позволяет пользователю вставлять строку в базу данных SQLite (файл .S3DB).Пользователь также может ВЫБРАТЬ строку из базы данных и УДАЛИТЬ строку из базы данных ... очень простое приложение.

Я хочу распространить это простое приложение, поэтому я создал файл setup.exe для приложениясоздав новый проект и используя мастер настройки на VS2010.Когда пользователь устанавливает приложение, он создает папку «TestDatabase» в каталоге Program Files и добавляет эти два файла вместе с файлом .exe:

  1. System.Data.SQLite.DLL (так какэто Обнаруженная зависимость)
  2. Файл TestDatabase.s3db (тестовая база данных для использования пользователем)

Когда я устанавливаю его на компьютер, я разрабатываю на ... всеработает.Однако при установке на другом компьютере происходит сбой при попытке открыть базу данных из приложения (которая хранится в C: \ Program Files (x86) \ TestDatabase \ TestDatabase.s3db).

Мне было интересно, если кто-то может помочь решить эту проблему?Спасибо.

Ответы [ 5 ]

4 голосов
/ 03 июня 2011

Вы не можете изменять файлы в каталоге Program Files, если вы не работаете в режиме администратора. Вместо этого следует развернуть файл .s3db в папке внутри %appdata%.

1 голос
/ 01 августа 2011

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

http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Кроме того, ravenspoint, RandomEngy и bryanbcook ... вы, ребята, были правы. Чтение / запись базы данных из папки Program Files - плохая идея из-за проблем с правами доступа, которые могут возникнуть при доступе к базе данных из папки Program Files. Поэтому я сохранил свою базу данных в папке AppData, где база данных может быть прочитана / записана без каких-либо проблем с разрешением.

1 голос
/ 09 июня 2011

Вы определенно хотите разрешить часть разрешений в уравнении, но вы также можете столкнуться с проблемой DbProviderFactories, с которой я столкнулся в выходные, выясняя, как использовать последние двоичные файлы из sqlite.org.Вы можете прочитать подробности в моем блоге , но краткий ответ заключается в том, что вам нужна запись в файле конфигурации или эквивалентный код, подобный следующему:

<system.data>
  <DbProviderFactories>
    <remove invariant="System.Data.SQLite" />
    <add name="SQLite Data Provider" 
      invariant="System.Data.SQLite" 
      description=".Net Framework Data Provider for SQLite" 
      type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
  </DbProviderFactories>
</system.data>

И вы должны убедиться, что выустановили «Копировать локально» равным true в вашей ссылке на сборку, чтобы сборка SQLite была включена в ваш проект \ bin и setup.

0 голосов
/ 09 июня 2011

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

C:/Program Data/<your company name>/<your application name>/

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

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

0 голосов
/ 03 июня 2011

Может быть проблема с разрешениями.Возможно, вы захотите использовать изолированное хранилище для этого.

Также возможно, что ваш проект использует сборки из GAC.Убедитесь, что ваши сборки локальны для вашего проекта.

...