Delphi-PRAXiS

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?

Reinhard Kern 22. Apr 2008 14:14

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

Zitat von Luckie
Seit wann gibt es das Dateiattribut "ausführen" unter Windows?

Zitat Windows-Hilfe zu Dateirechten:

>>Für Dateien: Mithilfe von Datei ausführen wird festgelegt, ob das Ausführen von Programmdateien ermöglicht werden soll (gilt nur für Dateien).

Wenn Sie die Berechtigung Ordner durchsuchen für einen Ordner festlegen, wird nicht automatisch auch die Berechtigung Datei ausführen für die Dateien in dem betreffenden Ordner eingerichtet.<<

Für Linux-fixierte vielleicht ungewohnt. Schau dir mal eine Datei unter NTFS an und wähle Sicherheit.

Gruss Reinhard

Luckie 22. Apr 2008 14:16

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

Zitat von Reinhard Kern
Schau dir mal eine Datei unter NTFS an und wähle Sicherheit.

Eben, das sind Berechtigungen für Objekte und keine Dateiattribute. Und keine Sorge, ich kenne mich mit der Benutzerverwaltung und dem NTFS Rechtesystem ganz gut aus. ;)

Allerdings habe ich es noch nie erlebt, dass ein Administrator dem Bneutzer in seinem eigenen temporären Verzeichnis solche Berechtigungen entzieht.

Matze 22. Apr 2008 14:19

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Danke für eure Antworten.

Ich befürchte, das ganze umzuschreiben wäre zu kompliziert und ob das funktionieren würde, ist die andere Frage, denn im Source steht lediglich das hier:

Delphi-Quellcode:
const
  FIDLL = 'FreeImage.dll';
Dann folgen die ganzen Funktionsdeklarationen mit diesem Aufbau:

Delphi-Quellcode:
procedure FreeImage_Initialise(load_local_plugins_only : boolean = False); stdcall; external FIDLL name '_FreeImage_Initialise@4';
Und ich muss zugeben, mit Dlls kenne ich mich nicht sehr aus.

Falls sich das zu einer Delphi-Frage entwickeln sollte, verschiebe ich das Thema noch.

@Reinhard: Ich hatte nicht vor, die Library "heimlich" einzubinden und habe oben bereits erwähnt, was die Entwickler bzgl. Nennung vorschreiben.
Man kann vieles einstellen, was die Rechte betrifft, doch im Temp-Verzeichnis bestimmte Rechte zu entziehen ist unsinnig. Wer das macht ist selbst schuld, wenn einiges nicht funktioniert, denn wie Michael erwähnte, ist das Windows-Standard.
Das wäre ja fast so, als würde man das Ausführen einer Exe unterbinden und vom Entwickler verlangen, dass sie trotzdem startet. ;)

Aber darum geht's hier nicht, ich gehe davon aus, dass im Temp-Verzeichnis Schreibrechte vorliegen.

Luckie 22. Apr 2008 14:25

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Hat EWeiss? jetzt nicht erst sowas gemacht?

Jupp hat er: http://www.delphipraxis.net/internal...t.php?t=131784 :P

Reinhard Kern 22. Apr 2008 14:33

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

Zitat von Luckie
Allerdings habe ich es noch nie erlebt, dass ein Administrator dem Bneutzer in seinem eigenen temporären Verzeichnis solche Berechtigungen entzieht.

Hallo Luckie,

dass unter Windows vieles sicherheitstechnisch im Argen liegt, heisst ja nicht, dass das immer so bleiben muss. Ich bin jedenfalls dafür, dass der Benutzer eines Firmen-PC ÜBERHAUPT KEINE Software installieren kann, und das aus Erfahrung: sonst hat bald jeder seine eigene Oberfläche/Dateiverwaltung, die er sich zuhause aus dem Netz gesaugt hat. Und ich habe es auch schon erlebt, dass Mitarbeiter eine DOS-Diskette mitgebracht haben, um mit DOS-Checkdisk eine angeblich fehlerhafte Windowsplatte mit langen Dateinamen zu "reparieren", durchaus in guter Absicht, aber mit vernichtendem Ergebnis.

Gruss Reinhard (bekennender Paranoiker)

Matze 22. Apr 2008 14:35

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
Hm danke Michael,

dann wären also tiefe Code-Änderungen nötig und die vermutlich in den C++-Dateien. Also dann lass ich's. :stupid:

Zitat:

Zitat von Reinhard
Ich bin jedenfalls dafür, dass der Benutzer eines Firmen-PC ÜBERHAUPT KEINE Software installieren kann

Ich denke, das befürwortet Michael ebenfalls (ich übrigens auch). ;)

Luckie 22. Apr 2008 14:41

Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
 
[quote="Reinhard Kern"]dass unter Windows vieles sicherheitstechnisch im Argen liegt, heisst ja nicht, dass das immer so bleiben muss.[7quote]
wo liegt da was im Argen? Wirdn ein Windows PC richtig administriert ist alles im grünen Bereich.

Zitat:

Ich bin jedenfalls dafür, dass der Benutzer eines Firmen-PC ÜBERHAUPT KEINE Software installieren kann
Na da würde sich aber unser Admin freuen, wenn er den ganzen Tag nur damit beschäftig ist auf unseren Entwickler-PC Software zu installieren. Installieren kan man ja sowieso nicht als normaler Benutzer und wenn, was macht es aus? Da die Programme im Kontext des Benutzers laufen, können sie auch keinen Schaden anrichten.


Zitat:

und das aus Erfahrung: sonst hat bald jeder seine eigene Oberfläche/Dateiverwaltung, die er sich zuhause aus dem Netz gesaugt hat.
Was ist dagegen einzuwenden? Ein aktueller Virenscanner sollte natürlich vorhanden sein. Und auch wenn der Benutzer einen Virus einschleppt, betroffen ist davon nur sein Profil.

Zitat:

Und ich habe es auch schon erlebt, dass Mitarbeiter eine DOS-Diskette mitgebracht haben, um mit DOS-Checkdisk eine angeblich fehlerhafte Windowsplatte mit langen Dateinamen zu "reparieren", durchaus in guter Absicht, aber mit vernichtendem Ergebnis
Aha. Ich glaube kaum dass ein 16-Bit Programm mit einem NTFS Dateisystem was anfangen kann. Hinzukommt, dass ich annehme, dass Windows die Ausführung verhindert, solange das Programm nicht von einem Administrator ausgeführt wird.

Ich sehe keinen Grund, warum man es dem Benutzer nicht gestatten sollte Dateien, die in seinen Profilordnern liegen, auszuführen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.

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