Развертывание одним щелчком - как мне убедиться, что файл базы данных sqlite копируется, только если он еще не существует? - PullRequest
3 голосов
/ 01 марта 2010

Справочная информация. Я начинаю использовать развертывание по принципу щелчка один раз для приложения WinForms, в котором имеется файл базы данных sqlite, который содержит пустую структуру базы данных, готовую к работе.

Вопрос - Как настроить все так, чтобы развертывание по принципу щелчка мышью (через публикацию, в VS2008) гарантировало, что при загрузке пользователь будет:

  • a) Если его еще нет, скопируйте файл, в противном случае
  • b) НЕ копируйте файл, НО проверьте, есть ли сценарий обновления, который должен быть запущен

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 марта 2010

Это не дает прямого ответа на ваш вопрос, но я подумал, что эта информация будет полезна для вас при планировании ваших действий. Прочитайте здесь (в частности, раздел под названием «Каталог данных и версии приложения») для описания того, как ClickOnce обрабатывает файлы в каталоге данных. Кроме того, чтобы рассматривать вашу базу данных как файл данных, убедитесь, что файл базы данных помечен как файл данных (Внутри VS.Net - Перейдите в Свойства проекта -> Проект -> Файлы приложения - убедитесь, что «Состояние публикации» равно «Файл данных»). «). Ниже я вставил раздел в той статье, на которую я ссылаюсь. Вы можете захотеть изучить одну вещь - использовать свойство IsFirstRun, а затем проверить, существует ли база данных, если она не создается во время выполнения, требует ли она обновления, обновления и т. Д. (Используя этот метод, вы можете создать базы данных "вне" каталога данных clickonce или создайте новую базу данных во время выполнения внутри каталога данных, который не существует в развертывании, чтобы вы могли контролировать, как база данных влияет на обновления).

"Каталог данных и версии приложений

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

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

Если вам требуется более детальная миграция данных, вы можете использовать API развертывания ClickOnce для выполнения пользовательской миграции из старого каталога данных в новый каталог данных. Вам нужно будет проверить доступную загрузку с помощью IsFirstRun, загрузить обновление с помощью Update или UpdateAsync и выполнить любую собственную работу по переносу данных самостоятельно после завершения обновления. "

0 голосов
/ 02 марта 2010

Возможно, "migratordotnet" подойдет для моего вопроса?

Нашел по адресу: http://code.google.com/p/migratordotnet/wiki/GettingStarted

...