![]() |
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 |
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 ;) |
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:
|
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Zitat:
Die Dll könnte schon direkt aus der Exe gestartet werden. Code ist beim Googeln zu finden. |
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 ![]() |
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Zitat:
Zitat:
|
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Schau mal
![]() |
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Zitat:
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 |
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 |
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Zitat:
Zitat:
Zitat:
|
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Zitat:
>>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 |
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Zitat:
Allerdings habe ich es noch nie erlebt, dass ein Administrator dem Bneutzer in seinem eigenen temporären Verzeichnis solche Berechtigungen entzieht. |
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:
Dann folgen die ganzen Funktionsdeklarationen mit diesem Aufbau:
const
FIDLL = 'FreeImage.dll';
Delphi-Quellcode:
Und ich muss zugeben, mit Dlls kenne ich mich nicht sehr aus.
procedure FreeImage_Initialise(load_local_plugins_only : boolean = False); stdcall; external FIDLL name '_FreeImage_Initialise@4';
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. |
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Hat EWeiss? jetzt nicht erst sowas gemacht?
Jupp hat er: ![]() |
Re: Dll in die Exe integrierbar ohne sie entpacken zu müssen
Zitat:
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) |
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:
|
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:
Zitat:
Zitat:
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 14:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz