Nano Hash - криптовалюты, майнинг, программирование

Интеграция SQLite с приложением Windows

Поэтому я создал простое приложение 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).

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


Ответы:


1

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

03.06.2011

2

Вы определенно хотите решить часть уравнения с разрешениями, но вы также можете столкнуться с проблемой 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.

08.06.2011

3

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

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

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

01.08.2011

4

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

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

03.06.2011

5

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

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

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

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

08.06.2011
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..