Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62

Внедрить SQLite в exe файл

08.06.2017, 14:08. Показов 5068. Ответов 28

Студворк — интернет-сервис помощи студентам
Всем привет! Дело такое: Вообщем, установил через NutGet SQLite. Все норм, все работает. Проблема в том что он рабоатет только если "Валяется" рядом с exe'шником. Что я пытался сделать: 1) зашел во вкладку ссылки 2) Копировать локально = false(для dll'лок SQLite и ей подобных). Код компилируется, но когда доходит до строчек когда c SQLite выдает следующую ошибку:
System.IO.FileNotFoundException: "Не удалось загрузить файл или сборку "System.Data.SQLite, Version=1.0.105.1, Culture=neutral, PublicKeyToken=db937bc2d44ff139" либо одну из их зависимостей. Не удается найти указанный файл."
Много читал на форуме, но толком никто ничего объяснить не может. Максимум говорят поставить в Copy local тру.
Друзья, помогите решить эту проблему. Желательно чутка объяснений, т.к. я новичок. Всем добра!^^
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.06.2017, 14:08
Ответы с готовыми решениями:

Внедрить файл Excel в exe или защитить этот файл
Имеется файл excel. Нужно создать программку которая не даст возможность копировать этот файл на другой компьютер или носители. ...

Внедрить .EXE файл в проект
Утра доброго. С прошедшим праздником всех! Подскажите пожалуйста, у меня в проекте 2 исполняемых файла (exe), можно ли их, прикрутить к...

Как внедрить TXT файл в EXE программу?
Здравствуйте! Кто знает как внедрить TXT файл в EXE программу? Примеры в Интернете с большими ошибками или просто нерабочие. Также вопрос...

28
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
08.06.2017, 17:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nik_33 Посмотреть сообщение
SQlite выделяет две папки с Interop для 64x и 86x.
Я вообще нугетом не пользуюсь. Скачиваю архив с нужными либами с оффсайта и все.
0
Эксперт .NET
 Аватар для Rius
13827 / 7870 / 1704
Регистрация: 25.05.2015
Сообщений: 23,906
Записей в блоге: 14
08.06.2017, 17:59
У программиста была проблема.
Он её решил с помощью регулярных выражений Assembly.Load.
Теперь у него две проблемы.

Вечная слава идущим по граблям вопреки советам впереди по ним прошедших!

Добавлено через 1 минуту
Цитата Сообщение от Nik_33 Посмотреть сообщение
Почему?
Остановите и посмотрите на args.Name
1
0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62
08.06.2017, 18:05  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Остановите и посмотрите на args.Name
О боже.. Я так понял .dll было лишним.. ппц
0
Эксперт .NET
 Аватар для Rius
13827 / 7870 / 1704
Регистрация: 25.05.2015
Сообщений: 23,906
Записей в блоге: 14
08.06.2017, 18:10
Цитата Сообщение от Nik_33 Посмотреть сообщение
Никогда не пользовался. Можно поподробнее?
Нативную библиотеку надо сохранить из ресурсов вручную во временный каталог. Потому что Assembly.Load её не переварит.
Затем, ДО использования абсолютно любых типов/классов/методов SQLite, нужно предзагрузить нужную библиотеку.
Делается это , например, так (кусок другого моего проекта):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    internal static class SerialPortWrapper
    {
        static SerialPortWrapper()
        {
            var myPath = new Uri(typeof(SerialPortWrapper).Assembly.CodeBase).LocalPath;
            var myFolder = Path.GetDirectoryName(myPath);
 
            var is64 = IntPtr.Size == 8;
            var subfolder = is64 ? "x64" : "x86";
 
            LoadLibrary(Path.Combine(myFolder, subfolder, "SerialCommWin32.dll"));
        }
 
        [DllImport("kernel32.dll")]
        private static extern IntPtr LoadLibrary(string path);
 
        [DllImport("SerialCommWin32.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "createObject", CallingConvention = CallingConvention.Cdecl)]
        public static extern IntPtr CreateObject();
...
Здесь в статическом конструкторе выбирается, какая библиотека нужна, и она подгружается, не используясь пока что.
Затем, уже при обращении к CreateObject и прочим импортированным методам, .Net не пытается самостоятельно найти нужный нативный файл, а пользуется тем, что мы ранее подгрузили.
Таким образом Any CPU приложение легко работает с нативной библиотекой родной разрядности и на x86, и на x64.

Добавлено через 1 минуту
Цитата Сообщение от Nik_33 Посмотреть сообщение
О боже.. Я так понял .dll было лишним.. ппц
Раз уж вы до этого места дошли, то пример у меня в блоге здесь на форуме. Хуже уже не будет, куда уж хуже...
1
0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62
08.06.2017, 18:18  [ТС]
Сложноватенько.. Попробую осмыслить. Где это вписывать вообще нужно? Что за конструктор?
0
Эксперт .NET
 Аватар для Rius
13827 / 7870 / 1704
Регистрация: 25.05.2015
Сообщений: 23,906
Записей в блоге: 14
08.06.2017, 18:24
Да всё равно где. Главное, чтобы нативная библиотека загрузилась до того, как произойдёт обращение из System.Data.Sqlite к импортированным методам.

Таким образом ваша программа будет при каждом запуске выгружать файлы и пытаться из подключить. Как следствие:
  • Увеличится время загрузки.
  • При проблеме с доступом ко временному каталогу программа упадёт.
  • Если попытаетесь сохранить файлы на постоянной основе после распаковки, это будет суррогат установщика.
>>>> Все эти проблемы решаются нормальным установщиком многофайловой программы в свой личный каталог в Program Files или ещё куда.
1
0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62
08.06.2017, 18:40  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Как следствие
Ага теперь вроде понял. Да, действительно можно выгружать во временный каталог, а при завершении удалять. Нужно еще до конца разобраться про временный каталог.

Добавлено через 8 минут
Цитата Сообщение от Rius Посмотреть сообщение
у меня в блоге здесь на форуме
Спасибо большое. Хорошая информация
0
Эксперт .NET
 Аватар для Usaga
14734 / 9508 / 1364
Регистрация: 21.01.2016
Сообщений: 35,879
08.06.2017, 18:41
Nik_33, и чего ради весь этот геморрой?))
0
08.06.2017, 19:08

Не по теме:

Наверное, чтобы

  • Программа медленно загружалась
  • Можно было сказать, что она из одного файла
    • Как, например, клиент Telegram
      • ну тот, который на C++ Qt со статической линковкой.
  • И совсем не важно, что
    • Это не статически слинкованное C++ приложение, поэтому так же быстро запускаться и работать не будет;
    • Требуется .Net Framework, состоящий из 200 МБ в 793 файлах;
    • Требуется Windows, из 30 ГБ в 100500 файлах.
  • Программу можно переносить простым копированием.
    • Копируя также (о ужас) файлы настроек.

    По хорошему придётся всё равно сделать инсталлятор, который
    • Решил бы вопрос этой темы просто само собой.
    • При установке всё равно создаст несколько файлов.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2017, 19:08

Как отделить BGI файл от EXE. Как можно внедрить данный модуль в рабочий файл?
Помогите!!! Хотелось бы избавиться от BGI файла и поместить все в рабочий файл. Как это можно следать. Если можно, то поподробнее! ...

Как внедрить БД в exe на VB 6.0
Hi! Есть база на Access 7.0 и проект на VB 6.0. Можно ли как-нибудь всунуть .mdb файл в exe-шник, чтобы никто не мог его открыть и...

Как внедрить .dll в .exe
Почему dll не может браться из ресурсов программы? А обязательно только из внешнего расположения программы? Есть ли способы внедрить ее в...

Имеется ли возможность внедрить dll в exe?
Добрый день! Подскажите, имеется ли возможность внедрить dll в exe? Если имеется, то, пожалуйста, опишите пошагово, как это реализовать...

Как внедрить внешние картинки в EXE
Hi! У меня в скрипте используются строки типа imgDatD1.Picture = LoadPicture('imgdays ' & DatD 10 & '.gif') В результате...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru