0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62

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

08.06.2017, 14:08. Показов 5072. Ответов 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
13831 / 7873 / 1705
Регистрация: 25.05.2015
Сообщений: 23,913
Записей в блоге: 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
13831 / 7873 / 1705
Регистрация: 25.05.2015
Сообщений: 23,913
Записей в блоге: 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
13831 / 7873 / 1705
Регистрация: 25.05.2015
Сообщений: 23,913
Записей в блоге: 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
14741 / 9515 / 1364
Регистрация: 21.01.2016
Сообщений: 35,907
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru