Расположение и среда файла базы данных SQLite

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

Когда я устанавливаю его (используя Visual Studio 2012 и проект InstallShield Limited Edition), он работает на моем основном компьютере (W7 64-bit), моем ноутбуке (W8 64 -bit) и ноутбук моего приятеля (W8 32-bit) в порядке.

Мой основной компьютер запускает программу как следует, он использует файл базы данных из папки базы данных программ (C:/Program Files (x86)/Program Name/Program Name/Database) и не создает дополнительные файлы db, но мой ноутбук и ноутбук моих друзей создают папку в "C:/Users/User/AppData/Local/VirtualStore/Program Files (x86)/Program Name/Program Name/Database" и используют оттуда базу данных.

Также я заметил сбой программы при запуске на другом моем тестовом компьютере с 32-разрядной версией W7, и я убедился, что .Net Framework установлен.

Строка подключения выглядит так: sqLiteConnection1.ConnectionString = "data source=.\\Database\\db"; Целевая платформа программы установлена ​​на Любой ЦП, и она использует .Net Framework 4.5, если это что-то помогает.

Любые идеи, что вызывает это и как я могу это исправить?


person Jester    schedule 23.08.2013    source источник


Ответы (2)


database file has to be in same folder where program is so user can take own backups

Опасность Уилла Робинсона! Пользователи без прав администратора не могут изменять файлы в общей папке или папке Program Files. Вы вынуждаете пользователей работать от имени администраторов или изменяете папку Program Files, чтобы ее могли изменять неадминистраторы; оба являются серьезными уязвимостями безопасности.

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

Ваше приложение должно скопировать базу данных приложения в пользовательскую папку, например Environment.SpecialFolder.ApplicationData, и сохранить там все изменения. Все пользователи могут изменять и создавать резервные копии данных из своих собственных папок, никаких уязвимостей безопасности не требуется. Кроме того, когда кто-то восстанавливает или удаляет приложение, все пользователи сохраняют свои данные.

person Dour High Arch    schedule 23.08.2013

Ваша строка подключения использует текущий каталог (.).

Создайте его динамически с помощью Assembly.GetExecutingAssembly().Location.

person LS_ᴅᴇᴠ    schedule 23.08.2013