Laden...

DLL von Drittanbieter mit einbinden

Erstellt von Butzi74 vor einem Jahr Letzter Beitrag vor einem Jahr 662 Views
B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr
DLL von Drittanbieter mit einbinden

Hallo zusammen.

Ich habe eine EXE Datei erstellt (nennen wir sie jetzt mal "Programm.exe", die später einfach durch kopieren auf jedem Windows Rechner verwendet werden kann. Eine Art Portable Version quasi. Klappt auch soweit.

Nun habe ich aber eine Zusatzfunktion eingebaut, bei der ich das NutGet Paket "DotNetZip" verwende. Diese DLL kann ich aber nicht fest in meine EXE einbinden, so dass diese nicht mit kopiert werden muss. Versteht ihr wie ich es meine?

Also der Anwender soll weiterhin sich nur die "Programm.EXE" kopieren müssen ohne zusätzlich die DotNetZip.DLL auch mit kopieren zu müssen.

PS: Wie bereits in anderen Threads schon erwähnt: Absoluter C# Anfänger.:-(

4.931 Beiträge seit 2008
vor einem Jahr

Verwendest du .NET Framework 4.x oder .NET 5/6?
Suche mal nach ILMerge bzw. "self-contained".

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Verwende .Net Framework 4.6

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Ok, dann schaue ich mir das mal mit ILMerge usw. an. Danke schon mal🙂

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Prima.
Habe es nun hinbekommen🙂

Aber nur mit dieser Lösung hier:
http://www.digitallycreated.net/Blog/61/combining-multiple-assemblies-into-a-single-exe-for-a-wpf-application

Denn z.b. das ILMerge wird nicht mehr unterstützt und kann bei Microsoft auch nicht mehr heruntergeladen werden.

Danke nochmal.

4.931 Beiträge seit 2008
vor einem Jahr

Nur zur Info. ILMerge gibt es weiterhin auf GitHub: ILMerge (und auch als NuGet Package), aber du hast recht, es funktioniert nicht mit WPF, da es die XAML Ressourcen nicht korrekt einbinden kann.
Aber es gibt LibZ als Alternative. 😉

16.806 Beiträge seit 2008
vor einem Jahr

Beachte, dass Du je nach Lizenz die Drittanbieter-DLL nicht mit ILMerge einbetten darfst.
In 99% der Fälle ist das untersagt. Dein Paket verwendet MS-PL als Lizenz, in der das aber glaube ich erlaubt ist.

F
10.010 Beiträge seit 2004
vor einem Jahr
B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Danke für eure ganzen Antworten. Musste leider alles wieder zurück bauen 😦
Aber nur weil das extrahieren nicht klappt. Egal ob mit der DLL von Drittanbieter (verschiedene probiert) oder mit den internen Tool (System.IO.Compression), es bricht immer mitten drin beim extrahieren ab.

Extrahiere ich die ZIP Datei manuell mit z.b. 7-Zip funktioniert es prima. Also komprimieren geht aus meinem Programm heraus. Und da ich die ZIP Datei mit 7Zip normal öffnen kann, scheint dort auch nicht das Problem zu liegen. Entweder bricht es beim extrahieren ab, weil die ZIP-Datei ziemlich gross ist oder keine Ahnung. Als ich es mit einer kleinen Zip-Datei machte, ging es problemlos. Nur bei grösseren bricht es ab.

Als Background: Ich habe ein Tool erstellt mit dem User Ihre Daten sichern können. Dabei wird ein Sicherungsordner erstellt, wo alles reinkopiert wird und dann anschießend dieser in eine ZIP-Datei verpackt wird. Beim zurücksichern wählt der User die ZIP-Datei aus und das Tool soll mir die ZIP Datei unter C:\Users\xxx\appdata\temp\Extrahtsich extrahieren und dann von dort die Daten zurück kopieren. Anschließend löscht er diesen Ordner unter Temp wieder. Am Speicherplatz kann es nicht liegen. Da habe ich genügend. Läuft beim extrahieren evtl. der RAM voll oder was könnte das Problem sein? Jetzt war ich fast fertig und dann so ein blödes Problem. 😦

Wie gesagt, egal ob mit DotNetZip oder anderem Package oder mit dem internen Zip-Funktion....das extrahieren klappt nicht.

16.806 Beiträge seit 2008
vor einem Jahr

Ohne genaue Exception und dazugehörigen StackTrace ist das für uns Glaskugelraten.
Da sowohl System.IO.Compression wie auch das von Dir genannte Paket sehr weit verbreitet ist - auch auf Enterprise-Ebene - ist die Wahrscheinlich gering, dass es an den Dependencies selbst liegt.

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Ok, als totaler Neuanfänger in C# (nie gelernt etc.) weiß ich nun nicht was du von mir brauchst? 🙂

Also mit


System.IO.Compression.ZipFile.ExtractToDirectory(Dateiname, Extraxcttemp);


lass ich die Datei extrahieren. Dateiname = die Zipdatei und Extrattemp = das Verzeichnis wo es hin extrahiert werden soll.

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Also, ich habe nun das ganze mir genauer angeschaut wann er abbricht. Es bricht mir immer mit der Fehlermeldung "Illegales Zeichen im Pfad" ab. Dabei handelt es sich um irgendwelche Favoriten Lesezeichen im Ordner "Favoriten". Da das Tool ja jedem User die Möglichkeit geben soll, seine Daten wie Desktop, Dokumente, Downloads etc. zu sichern, kann ich nicht um voraus bestimmte Dateien/Verknüpfungen einfach ausschließen.

Was mich eben wundert: Egal ob mit WinZip, 7Zip oder mit dem int. Zip Funktion von Windows: Ich kann problemlos die Zip Datei komplett extrahieren. Wieso kann dies aber nicht DotNetZip oder das int. Zip von C# etc.??

16.806 Beiträge seit 2008
vor einem Jahr

Die Anwendungen können das wahrscheinlich auch nicht, sondern haben einfach ein Fehlerhandling eingebaut; ignorieren zB. solche Dateien.
Musst Du auch umsetzen. Da wirst wahrscheinlich noch einige solcher Fälle finden, zB auch sowas wie File Permissions, File in Use, Softlinks, Hardlinks...

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Hmm. Ok. Also File in Use fällt schon mal weg da diese nicht in Benutzung sein kann. File Permissions schließe ich auch aus, da ich dies schon mit dem Kopieren zuvor in den Ordner ausschließe. Softlinks und Hardlinks weiß ich nun nicht genau was du damit gerade meinst:-(

Tja, schade eigentlich. Wollte gerne, dass die Daten welcher der User sichert danach in eine ZIP gepackt wird und mit einem Kennwort verschlüsselt sind. Und nur der User kann kann dann mit diesem Tool auch ein Rücksichern machen. Also die Zip Datei extrahieren und die Daten zurückkopieren lassen. Ging/geht auch prima ...Aber wehe eine komische Datei ist dabei...dann bricht mir das extrahieren ab:-(

16.806 Beiträge seit 2008
vor einem Jahr

Tjo, das sind halt die Edge Cases der Software Entwicklung.
Da mussten andere auch durch. Du erfindest halt das Rad neu 😉

Eine ZIP von Dateien ist jedoch eher auch ein Datengrab, statt ein Backup.
Warum haben die User nicht die Möglichkeit ein echtes Backup System zu nutzen? Hat ja Windows auch in einer gewissen Art eingebaut, zumindest in der Form der File Histories.

B
Butzi74 Themenstarter:in
23 Beiträge seit 2022
vor einem Jahr

Ja, so wirkliches Backup soll es ja nicht sein. Wir tauschen hier im Geschäft alle vier Jahre die Rechner. Egal ob die noch top sind oder nicht. Da zieht also der User von einem Rechner auf den anderen um. Manche machen es selbst was die Daten angeht, andere bekommen es eben nicht hin. Ja, es gibt Leute die sich in manch Programm eben auskennen wie kein anderer, aber in reinen Windowsdingen die vollen Nieten sind. Zwar könnte man nun sagen, sie sollen einfach über ihr Microsoft Konto die Daten online sichern (Synchronisieren per OneDrive) aber mögen viele nicht und zudem werden nicht auch die Favoriten von GoogleChrome sowie manch SAP Einstellungen mit kopiert.

Ich wollte nun einfach (eher aus Spass und um mal C# etwas kennen zu lernen) ein Tool erstellen mit dem der User die Daten selbst "kurz" wegsichert und dann auch wieder "zurück sichert".
Hatte ja schon mal was in der Art gebastelt. Auf CMD Basis. Aber da gibt es eben keine schönen Dialogfenster zum Auswählen von Ordner oder Dateien etc.🙂

Wie auch immer....Muss mir da was mal einfallen lassen. Vielleicht probiere ich noch die Variante, dass beim Sichern gleich alles in eine ZIP gehauen wird und beim zurück sichern die ZIP geöffnet wird und direkte daraus alles raus kopiert wird. Spare ich mir das Extrahieren. Und wer weiß....vielleicht geht dies ja.🙂