Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];

Вниз

как открыть dll засунутую вexe шник как ресурс   Найти похожие ветки 

 
azatsh   (2010-06-23 11:40) [0]

Вобщем я подключаю dll"ку как ресурс к своему exe"шнику. Далее во время выполнения программы мне нужно суметь открыть эту библиотеку и работать с ней как с библиотекой. Способ вытащить ресурс и сохранить в файл а потом открыть через LoadLibrary мне не подходит!


 
Сергей М. ©   (2010-06-23 11:43) [1]

От кого шифруемся ?)


 
Leonid Troyanovsky ©   (2010-06-23 11:46) [2]


> azatsh   (23.06.10 11:40)  

>  Далее во время выполнения программы мне нужно суметь открыть
> эту библиотеку и работать с ней как с библиотекой.

Красть грешно.

--
Regards, LVT.


 
azatsh   (2010-06-23 11:48) [3]

что красть? это мой проект!)


 
Leonid Troyanovsky ©   (2010-06-23 11:52) [4]


> azatsh   (23.06.10 11:48) [3]

> что красть? это мой проект!)

dll?

--
Regards, LVT.


 
azatsh   (2010-06-23 11:57) [5]

проблема в том что создание файла на диске может быть невозможным. а прячу dll в экзешнике потому что правила такие что ничего кроме экзе файла не должно быть


 
Сергей М. ©   (2010-06-23 12:07) [6]


> это мой проект


Ну раз твой, то нашиша пихать его в ресурс и иметь при этом геморрой, в то время как ничто не мешает просто перенести нужную функц-ть из проекта dll в проект exe ?)


 
~AQUARIUS~ ©   (2010-06-23 12:18) [7]

Есть папка, называется Application Data. Она всегда доступна на запись т.к. специально предназначеня для того чтобы приложения хранили там настройки, временные файлы и т.д. Можете создать там подпапку и извлекать длл туда:
function GetAppDataDir: string;
var Buf: array [0..MAX_PATH] of WChar;
begin
 FillChar(Buf, SizeOf(buf), 0);
 if ShGetSpecialFolderPath(0, Buf, CSIDL_APPDATA, false) then Result := Buf
   else Result := "";
 if Result <> "" then Result := IncludeTrailingPathDelimiter(trim(Result));
end;

Еще для этих целей можно использовать папку %TEMP%


 
Плаг Инь   (2010-06-23 12:18) [8]

Теоретически... это могут быть плагины, которые, в зависимости от версии программы, прилинковываются к EXE. Указал при компиляции, какие ресурсы линковать, а потом, при выполнении - провел поиск в прилинкованных ресурсах, и, если нашел, то загрузил в адресное пространство процесса и используешь. Одному клиенту слинковал одно. Другому -другое. Клиент видит единственный EXE. А что там внутри - ему знать не надо. Да и при работе программы разворачивать все это на диске клиента -не всегда возможная реализация. На самом деле, красивее было бы развернуть все это в памяти и использовать. Или даже, например, из БД подгружать модули.

К сожалению, такой возможности легально - не существует. То есть, в интернете есть множество полу- и недорешений, намеков, идей и фантазий, зависящих от конкретной версии ОС, да и использующих такие лазейки, что порой от одного прочтений плохо становится. Но чего-то реально работающего, красивого и надежного - нет.


 
~AQUARIUS~ ©   (2010-06-23 12:21) [9]


> ...в то время как ничто не мешает просто перенести нужную функц-
> ть из проекта dll в проект exe ?)

Не всё можно перенести в ехе, есть вещи которые могут быть сделаны только в длл (хуки например)


 
Сергей М. ©   (2010-06-23 12:31) [10]


> вещи которые могут быть сделаны только в длл (хуки например)


1. Не всякий хук требует DLL.
2. Если таки требует, но это идет вразрез с "правилом", то значит что-то либо "правило" вывосано из пальца либо что-то не ладно в консерватории)


 
Leonid Troyanovsky ©   (2010-06-23 12:38) [11]


> ~AQUARIUS~ ©   (23.06.10 12:21) [9]

> сделаны только в длл (хуки например)

Поставлять только dll, а rundll найдется.

--
Regards, LVT.


 
Игорь Шевченко ©   (2010-06-23 13:00) [12]


> Способ вытащить ресурс и сохранить в файл а потом открыть
> через LoadLibrary мне не подходит!


Другого нет или он крив до необычайности


 
Сергей М. ©   (2010-06-23 13:12) [13]

- Что, Данила-мастер, не выходит твоя DLL из EXE ?
- Ох не выходит(
- А нефих было засовывать !


 
~AQUARIUS~ ©   (2010-06-23 15:02) [14]


> Leonid Troyanovsky ©
> Поставлять только dll, а rundll найдется.

Представляю себе как интересно будет убеждать конечного пользователя (может даже и какую-то блондинку :-) ) что запускать через командную строку rundll передавая ему путь к длл и нужные параметры - удобнее чем два раза щелкнуть в проводнике по значке программы и не парить себе мозги


 
Anatoly Podgoretsky ©   (2010-06-23 15:40) [15]

> azatsh  (23.06.2010 11:40:00)  [0]

Зачем ты это творишь.
Вытаскивать из ресурса ничего не надо, надо просто просто положить рядом.


 
Anatoly Podgoretsky ©   (2010-06-23 15:40) [16]

> azatsh  (23.06.2010 11:48:03)  [3]

Врать не хорошо.


 
Anatoly Podgoretsky ©   (2010-06-23 15:41) [17]

> azatsh  (23.06.2010 11:57:05)  [5]

Еще раз врать не хорошо. Ехе видишь ли он может записать, а ДЛЛ нет. Ню ню.


 
Anatoly Podgoretsky ©   (2010-06-23 15:43) [18]

> ~AQUARIUS~  (23.06.2010 15:02:14)  [14]

Тебе надо программиста пригласить.


 
Leonid Troyanovsky ©   (2010-06-23 16:27) [19]


> ~AQUARIUS~ ©   (23.06.10 15:02) [14]

> запускать через командную строку rundll передавая ему путь
> к длл и нужные параметры - удобнее чем два раза щелкнуть
> в проводнике по значке программы и не парить себе мозги

Это задача инсталятора: создать необходимый ярлык(и).

--
Regards, LVT.


 
~AQUARIUS~ ©   (2010-06-23 19:19) [20]


> Leonid Troyanovsky ©   (23.06.10 16:27) [19]
> Это задача инсталятора:
> создать необходимый ярлык(и).
>
> --Regards, LVT.


В чем тогда преимущество однофайловой программы, если теперь для нее нужно еще и инсталятор который будет создавать ярлык, плюс тогда уже нужно и деинсталятор чтобы хвосты подчистить ;-D


 
Leonid Troyanovsky ©   (2010-06-23 19:25) [21]


> ~AQUARIUS~ ©   (23.06.10 19:19) [20]

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

Однофайловую не я заказывал.
Впрочем, и для однофайловой нужен инсталятор/деинсталятор.
См. также http://podgoretsky.com/OtherParts/DM/BadWill.aspx

--
Regards, LVT.


 
~AQUARIUS~ ©   (2010-06-23 19:38) [22]


> См. также http://podgoretsky.com/OtherParts/DM/BadWill.aspx

Знаю, видел однажды. Но наличие инсталятора - это просто хороший тон. А вот если программа состоит только из одного файла и может работать без инсталяции - это никому не нужное излишество. Нельзя все и всегда делать руководствуясь только правилами - люди тем отличаются от машин что могут не следовать строго правилам в тех ситуациях, когда это и в самом деле не нужно

P.S. Насчет Пьяного Дельфина. Где вы такие дурацкие вопросы находили? Я когда еще только начинал программировать - мне даже 1% от такого бреда никогда в голову не приходил


 
Leonid Troyanovsky ©   (2010-06-23 19:46) [23]


> ~AQUARIUS~ ©   (23.06.10 19:38) [22]

> P.S. Насчет Пьяного Дельфина. Где вы такие дурацкие вопросы
> находили? Я когда еще только начинал программировать - мне
> даже 1% от такого бреда никогда в голову не приходил

Находил их Tolik Tentser ©.
На какой почве? - На нашей, датской, т.е., фидошной, в то время.
А те вопросы vs здешние, IMHO, уровня одного.

--
Regards, LVT.


 
~AQUARIUS~ ©   (2010-06-23 19:53) [24]

Ладно. Думаю что этот вопрос можно закрывать. Посмотрел случайно как работает мой любимый SkinEngine :-) В ресурсах лежит длл-файл с самим движком, при запуске проги он выгружается в папку %TEMP% загружается через LoadLibrary а в конце удаляется. При этом можно не особо заботиться об успешности удаления - после следующей чистки дисков временные файлы все равно будут удалены. Так что, Автор, не изобретайте велосипед начиная с колеса, смотрите как делают другие, думайте и делайте так же ;-)


 
Leonid Troyanovsky ©   (2010-06-23 19:59) [25]


> ~AQUARIUS~ ©   (23.06.10 19:53) [24]

> будут удалены. Так что, Автор, не изобретайте велосипед
> начиная с колеса, смотрите как делают другие, думайте и
> делайте так же ;-)

Дык, они ж, наверное, не крадут.

А закрытие тем это модераторово.
Быть может еще не все соображения предъявлены.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2010-06-23 20:21) [26]

> ~AQUARIUS~  (23.06.2010 19:38:22)  [22]

Это не только хороший тон, это норма и не важно, что может работать без
инсталяции, ты это можешь в readme отразить. Это так же процесс удобства, в
некоторой мере и вопрос безопасности, я должен иметь возможность увидеть что
установлено, а не лазить по всему диску.

Пользователи и администраторы будут тебе благодарны.


 
О, 5 - 25   (2010-06-23 21:25) [27]

Удаленные офисы. Много. На каждом - один компьютер, один пользователь. Пользователь работает под пользовательскими правами, не под администратором. Пользователям под админом не пускают. Разумно, не так ли?

Понадобился набор утилит. Не важно, каких. Утилиты периодически меняются. У разных пользователей разные утилиты, в зависимости от особенностей работы конкретного офиса.

Так и напрашивается скинуть все это добро в виде одного файла, с вкомпилированными утилитами. Произошли изменения - скинули новый файл. Установки не требует, пользователь вообще о таком процессе, как установка, не задумывается, просто запустил и пользуется. Администраторы и программист сидят в теплом офисе, пьют чай и радуются жизни.

Можно и во временную папку распаковывать, но, опять же таки, бизнес-условия могут быть разными...

А вы предлагаете инсталляторы. Которые, по большому счету, требуют администраторских прав. Ради чего, ради просто установки набора утилит? Пользователи и, тем более, администраторы, будут совсем не рады такому "хорошему тону".

Вообще, что за фантазии про хороший тон? Снобизм сплошной!


 
Посторонний   (2010-06-23 21:34) [28]


> А вы предлагаете инсталляторы. Которые, по большому счету,
>  требуют администраторских прав


Инсталлятор инсталлятору люпус эст. Не все требуют


> Вообще, что за фантазии про хороший тон? Снобизм сплошной!


Это вся твоя помощь автору ? Ты делом, делом давай помогай


 
Anatoly Podgoretsky ©   (2010-06-23 21:34) [29]

> О, 5 - 25  (23.06.2010 21:25:27)  [27]

И зачем тут нужна DLL тем более в таком извращеном применение.


 
Anatoly Podgoretsky ©   (2010-06-23 21:44) [30]


> О, 5 - 25   (23.06.10 21:25) [27]

Инсталяция программ прерогатива администратора, а никак не пользователя.


 
~AQUARIUS~ ©   (2010-06-23 21:52) [31]

ИМХО Если программе подходит инсталятор который не требует админских прав, тогда без него можно вообще обойтись. Если уж очень надо инсталятор, то таких случаях программа может сама им стать (если уж там действительно один файл и приложение портабельное)


 
О, 5 - 25   (2010-06-23 22:57) [32]

>Anatoly Podgoretsky ©   (23.06.10 21:44) [30]
>Инсталяция программ прерогатива администратора, а никак не пользователя.


Толя, я понимаю, что ты за рабочее место трясешься. Я понимаю, Толя, что тебе хочется, очень хочется, чтобы каждый пользователь от тебя зависел. Но большинство пользователей неплохо обходятся без тебя и таких, как ты. Смирись.

>Anatoly Podgoretsky ©   (23.06.10 21:44) [30]
>И зачем тут нужна DLL тем более в таком извращеном применение.


Ты, Толя, читать разучился? Повторяю: чтобы в произвольном порядке линковать библиотеки к готовому основному исполняемому файлу, в зависимостей от потребностей версии. Легко и намертво вшиваемые в приложение плагины.

>Посторонний   (23.06.10 21:34) [28]
>Инсталлятор инсталлятору люпус эст. Не все требуют


Толян, вон, требует. Толяну всякий софт без инсталлятора люпус эст.

>Посторонний   (23.06.10 21:34) [28]
>Это вся твоя помощь автору ? Ты делом, делом давай помогай


Давай, ты будешь искать занятие сам для себя. Только найди уж, будь добр, что-то такое, чтобы долго-долго этим заниматься. Очень долго.
Тем более, что решений загрузки библиотек напрямую в память, минуя диск, как было уже сказано - реально не существует.


 
Посторонний   (2010-06-23 23:00) [33]

О, 5 - 25   (23.06.10 22:57) [32]


> Давай, ты будешь искать занятие сам для себя


Давай ты не будешь говорить, что мне делать и не узнаешь, куда тебе идти.


 
Leonid Troyanovsky ©   (2010-06-23 23:01) [34]


> О, 5 - 25   (23.06.10 22:57) [32]

Не умничай, код давай.

--
Regards, LVT.


 
~AQUARIUS~ ©   (2010-06-23 23:14) [35]

Господа, давайте прекращать троллить, и возвращайтесь к основной теме. Если очень хочется поспорить о необходимости создавать для каждой программы инсталятор, делайте это в личном порядке. Думаю автору на***н надо сейчас эти споры; он сидит и думает что же ему делать с его длл

Если работодатель сказал бы, что вы должны сделать портабельную программу, которая должна быть в виде одиночного исполняемого файла - стали бы вы его убеждать что лучше будет сделать инсталятор, а с прогой тащить еще кучу файлов? Интересно, а куда вас заказчик после этого отправит?


 
Leonid Troyanovsky ©   (2010-06-23 23:37) [36]


> ~AQUARIUS~ ©   (23.06.10 23:14) [35]

>  он сидит и думает что же ему делать с его длл

Да нам пофиг, что он там думает делать с чужой длл.

Неужели непонятно, что здешнее обсуждение
не нацелено на техподдержку некого автора?

Если не может оный автор извлечь к.л. пользу
из текущего обсуждения - это его проблем.

--
Regards, LVT.


 
Германн ©   (2010-06-24 02:07) [37]


> Если работодатель сказал бы, что вы должны сделать портабельную
> программу, которая должна быть в виде одиночного исполняемого
> файла - стали бы вы его убеждать что лучше будет сделать
> инсталятор, а с прогой тащить еще кучу файлов? Интересно,
>  а куда вас заказчик после этого отправит?

А куда его отправлю я тебя не интересует? Да мне и не нужно его отправлять. Он и сам там окажется после моего отказа. :)
Проверено.


 
KilkennyCat ©   (2010-06-24 02:20) [38]

сделать конкатенцию екзешника и длл, а потом как-то объяснить, где чего начало и размер...


 
Германн ©   (2010-06-24 03:02) [39]


> KilkennyCat ©   (24.06.10 02:20) [38]
>
> сделать конкатенцию екзешника и длл, а потом как-то объяснить,
>  где чего начало и размер

Мимо, Костя.
Суть сабжа - воспользоваться длл не из файла на диске, а из образа в памяти.


 
Anatoly Podgoretsky ©   (2010-06-24 13:13) [40]

Смысла нет извлекать ДЛЛ и записывать ее на диск, когда это можно сделать сразу, без дурной работы, кроме хитрой попытки скрыть ворованое.



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.005 c
2-1315223947
vasiliy87
2011-09-05 15:59
2011.12.18
Вопрос о параметрах интефейсных функций


6-1248848880
Sonoleo
2009-07-29 10:28
2011.12.18
МЭК 80670-5-104


1-1277700449
George
2010-06-28 08:47
2011.12.18
Создание службы - отказывается запускаться


15-1314592325
Дмитрий С
2011-08-29 08:32
2011.12.18
Целочисленное деление mysql и...


2-1315648401
Pushok
2011-09-10 13:53
2011.12.18
При закрытии Delphi вылетает AV





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский