Местоположение и среда на файла на базата данни на SQLite

Разработих малък софтуер за Windows от няколко седмици и имам проблеми, когато се опитвам да направя подходяща инсталационна програма за него. Получих конкретна заявка, че файлът на базата данни трябва да бъде в същата папка, където е програмата, така че потребителят да може да прави собствени резервни копия от време на време.

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

Основният ми компютър изпълнява програмата както трябва, използва файл с база данни от програми Database -folder(C:/Program Files (x86)/Program Name/Program Name/Database) и не създава допълнителни db файлове, но моят лаптоп и лаптопът на моите приятели създават папка в „C:/Users/User/AppData/Local/VirtualStore/Program Files (x86)/Program Name/Program Name/Database“ и използват база данни от там.

Също така забелязах, че програмата се срива при стартиране на другия ми тестов компютър, който работи с W7 32-bit и се уверих, че .Net Framework е инсталиран.

Низът за връзка изглежда като: sqLiteConnection1.ConnectionString = "data source=.\\Database\\db"; Целевата платформа на програмата е зададена на Any CPU и използва .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, така че не-администратори да могат да я променят; и двете са сериозни уязвимости в сигурността.

Ако инсталирате базата данни в папката Programs, тогава базата данни е част от инсталацията, а не потребителски данни. Това означава, че поправката или деинсталирането на приложението ще изтрие всички потребителски данни. Потребителите не харесват това.

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

person Dour High Arch    schedule 23.08.2013

Вашият низ за връзка използва текущата директория (.).

Създайте го динамично с Assembly.GetExecutingAssembly().Location.

person LS_ᴅᴇᴠ    schedule 23.08.2013