Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dll in die Exe integrierbar ohne sie entpacken zu müssen? (https://www.delphipraxis.net/112492-dll-die-exe-integrierbar-ohne-sie-entpacken-zu-muessen.html)

Matze 22. Apr 2008 12:46


Dll in die Exe integrierbar ohne sie entpacken zu müssen?
 
Hallo,

ich benutze in einem Programm eine Dll, die im Programmverzeichnis liegt. Meinem Kunde wäre es jedoch lieber, wenn er nur eine Exe weitergeben müsse. Ich schlug im daraufhin die Option vor, die Dll in die Exe zu integrieren (als Ressource) und diese beim Programmstart zu entpacken. Doch dies ist nicht möglich, da die Anwender dort keine Schreibrechte haben, was eigentlich löblich ist.

In der DP wurde bisher immer die Option angesprochen, die Dll zu entpacken, daher vermute ich, geht es nicht anders und muss bei den 2 Dateien bleiben.
Da ich mir aber nicht sicher bin, frage ich dennoch:
Gibt es eine Möglichkeit, die Dll in die Exe zu integrieren ohne sie entpacken zu müssen bzw. kennt ihr ein anderes Vorgehen, bei dem man nur eine einzelne Datei weitergeben muss (in ein Archiv packen meine ich jedoch nicht)?

Ein "Nein, gibt es nicht" reicht mir voll und ganz. ;)

Grüße

s-off 22. Apr 2008 12:56

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Hallo Matze,

da Du bei einer eigenen DLL den Code dieser auch direkt in die Anwendung packen könntest, gehe ich davon aus, dass es sich um eine Fremd-Dll handelt.

Stellt sich da nicht die Frage, ob man das - seitens des Autors der Fremd-Dll - überhaupt darf?
Klar, du veränderst die Dll nicht, aber du 'versteckst' sie.

Jetzt kommen vielleicht wieder einige mit dem Einwand 'Was soll daran verboten sein?!' - ich weiß es nicht. Deshalb frage ich. Aber ich habe mittlerweile gemerkt, dass Recht und Gesetz nicht so einfach ist, wie man sich das manchmal vorstellt im Leben.

Bevor ich etwas mache, bei dem ich nicht hundertprozentig sicher bin, dass man das darf, lasse ich es lieber.

*********

Nimms mir net übel, wenn ich etwas Off-Topic werde - aber mich interessiert es selber auch, und ich dachte, da wäre das ein guter Aufhänger ;)

Matze 22. Apr 2008 13:07

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Hallo s-off,

das nehme ich dir doch nicht übel und der Hinweis ist gut.

Übrigens hast du recht, es handelt sich um eine Fremd-Dll (FreeImage) und in der Lizenz sehe ich nichts dergleichen:

Zitat:

you are REQUIRED to
- distribute the license (GNU GPL or FIPL) you choosed with your application (i.e. the TXT file)
- provide a suitable acknowledgement, either in the program's "About" box or in the user's manual (or both)
Näheres könnte man sicher auch mit den Entwicklern abklären, sofern überhaupt eine Möglichkeit dieser Art besteht.

toms 22. Apr 2008 13:19

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Zitat:

Zitat von Matze
Ich schlug im daraufhin die Option vor, die Dll in die Exe zu integrieren (als Ressource) und diese beim Programmstart zu entpacken. Doch dies ist nicht möglich, da die Anwender dort keine Schreibrechte haben, was eigentlich löblich ist.

Im Temp-Verzeichnis haben sie auch keine Schreibrechte?

Die Dll könnte schon direkt aus der Exe gestartet werden. Code ist beim Googeln zu finden.

igel457 22. Apr 2008 13:31

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Es gibt hier im Forum doch auch eine "TBassPlayer" Komponente, die ohne die Bass.dll auskommt - schau dir doch einfach mal den Sourcecode davon an.

Du musst den ausführbaren Code vermutlich mittels MSDN-Library durchsuchenVirtualAlloc irgendwie laden.

Matze 22. Apr 2008 13:32

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Zitat:

Zitat von toms
Im Temp-Verzeichnis haben sie auch keine Schreibrechte?

Dort vermutlich schon, nur musste ich den Dll-Pfad nicht angeben, sondern das macht diese Library. Daher weiß ich nicht, ob das funktionieren würde.

Zitat:

Zitat von toms
Die Dll könnte schon direkt aus der Exe gestartet werden. Code ist beim Googeln zu finden.

Ich habe zwar gesucht, werde aber nochmals schauen, ob ich was dazu finde. Auch die möglichen Nachteile dieses Vorgehens wären gut zu wissen. Aber vielleicht finde ich etwas.

teebee 22. Apr 2008 13:40

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Schau mal hier.

Reinhard Kern 22. Apr 2008 13:42

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Zitat:

Zitat von Matze
... Doch dies ist nicht möglich, da die Anwender dort keine Schreibrechte haben, was eigentlich löblich ist.

Hallo,

ein paranoider Administrator kann den Rechner so einrichten, dass nur ein Admin Programmdateien installieren kann - und als Admin kann man garnicht paranoid genug sein. Die DLL im Temp-Verzeichnis oder in einem Userverzeichnis zu entpacken ist alles andere als Windows-konform und könnte auch noch unterbunden werden, wenn man den Dateien dort das Attribut "ausführbar" nicht gibt.

Wird das so gemacht (und damit muss man rechnen, in Zukunft sicher noch mehr), dann gibt es das Konzept "Exe weitergeben und einfach kopieren und ausführen" überhaupt nicht mehr, sondern grundsätzlich ist der Installationsvorgang getrennt von der Ausführung und muss von einem Admin vorgenommen werden. Auch wenn du keine DLL hättest, die Exe könnte der User ja auch nicht selbst in "Programme" kopieren. Bei einem Firmen-PC halte auch ich es für wünschenwert, dass der normale User keine Möglichkeit hat, sich irgendwelche Utilties dazuzuinstallieren ("Ich will meinen Norton Commander wie zuhause...").

Dann kann man aber auch gleich eine Installations-Exe schicken.

Zur Lizenz: i.A. musst du erwähnen, dass du Fremdsoftware benutzt, z.B. in der About-Funktion, egal ob diese Software mitgelinkt wurde oder in einer DLL steht. Viele Entwickler bieten ja beide Möglichkeiten: an meistens bekommt man eine Library und kann daraus auch eine DLL kompilieren.

Gruss Reinhard

Carlo91 22. Apr 2008 13:47

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Hi,
ja es geht man muss die DLL in den speicher laden und dann DLLMain callen.
Ein Möglichkeit ist die uallCollection zu downloaden und dann die function LoadLibraryParamDllMainAX aus uallKernel.pas so abzuändern das sie die DLL nicht aus einer datei läd sondern aus z.B. einen TMemoryStream. Um dann exports aus der DLL zu benutzen muss man GetProcAddressX aus der uallKernel.pas nehmen.

P.S. ich hoffe das ich nichts vergessen hab ist schon lange her das ich das gemacht hab...

MfG Carlo

Luckie 22. Apr 2008 13:53

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Zitat:

Zitat von Reinhard Kern
ein paranoider Administrator kann den Rechner so einrichten, dass nur ein Admin Programmdateien installieren kann

So ein Administrator ist nicht paranoid, sondern nur vernünftig und macht seinen Job.

Zitat:

Die DLL im Temp-Verzeichnis oder in einem Userverzeichnis zu entpacken ist alles andere als Windows-konform
Genau das ist Windows konform.

Zitat:

und könnte auch noch unterbunden werden, wenn man den Dateien dort das Attribut "ausführbar" nicht gibt.
Seit wann gibt es das Dateiattribut "ausführen" unter Windows?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz