Resourcen DLL erstellen und in eine Exe einbinden/starten

  • VB.NET

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von Nero.

    Resourcen DLL erstellen und in eine Exe einbinden/starten

    Hallo Community,

    Ich bin neu in Visual Basic 2012 und wollte mir für's erste ein kleines Menü zusammenbasteln, um somit schritt für schritt die sprache richtig zu verstehen. Ich habe mir eine neue windowsform1 erstellt mit einen Button, der mir ein Programm startet soll (zb. Taschenrechner) in der DLL Resourcen datei. Wie ihr schon in der Überschrift herauslesen könnt suche ich eine gute beschreibung, wie man eine Resourcen DLL erstellt und sie in meine windowsform1 bindet zu dem einen Button. Als Resource soll zu testzwecken der gute alte Taschenrechner von Microsoft dienen, damit es verständlich ist für alle. Falls ich mich falsch ausgedrückt haben oder ihr mich falsch verstanden habt, dann versuche ich ein TestMenü hochzuladen oder fragt nochmal nach.

    lg Nero
    Mach doch in deine Ressourcen-DLL alle enthaltenen Ressourcen public (also per Property) und füge sie der neuen Exe über die Verweise hinzu...
    In der Ressourcen-DLL sollte es dann so aussehen:

    VB.NET-Quellcode

    1. Public Class BlaBlaBla
    2. Public Shared ReadOnly Property Ressource1 As <Typ der Ressource Nr. 1>
    3. Get
    4. Return My.Resources.Ressource1
    5. End Get
    6. End Property
    7. Public Shared ReadOnly Property Ressource2 As <Typ der Ressource Nr. 2>
    8. Get
    9. Return My.Resources.Ressource2
    10. End Get
    11. End Property
    12. End Class
    Viele Grüße,
    wincrash

    Edit: In der normalen Exe, die auf die Ressourcen-DLL zugreift, steht dann:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Shared Sub Form1_Load '(...)
    3. PictureBox1.Image = RessourcesDLL.BlaBlaBla.Ressource1 'Warnur ein Beispiel :D
    4. End Sub
    5. End Class
    (\_/) Das ist Hase.
    (O.o) Kopiere Hase in deine Signatur
    (> <) und hilf ihm so auf seinem Weg zur Weltherrschaft.
    @Nero: Willkommen im Forum. :thumbup:
    Ohne Dich jetzt erschlagen zu wollen und Dich möglicherweise nicht ganz verstanden zu haben: Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Wincrash: Ich bekomme es einfach alleine nicht hin bzw. verstehe es noch nicht ganz. Ich habe jetzt für Testzwecken ein BasicMenü erstellt und lade es auf multiupload.nl hoch für alle. Kannst du mir wie du es beschrieben hast es vervollständigen mit der DLL Resource und es neu hochladen? Wenn ich den Code richtig verstanden haben, braucht man noch eine Picturebox. Lieg ich da richtig?


    @RodFromGermany: :D Vielen Dank, für deine Unterstützung. Das Menü soll noch von mir erweitert werden und da kommt auch bestimmt noch eine Übersetzung in verschiedenen Sprachen.


    Als Resource habe ich mir einen eigenen kleinen Taschenrechner zusammengefrimmelt damit ich kein Microsoft Copyright verletze. Man weis ja nie was die NSA speichert/sieht. Der Taschenrechner ist die Resource im Menü, der jetzt zur dll voranschreiten soll. ;D

    ps: Habe es zu spät gemerkt das man im Forum auch dateien hochladen kann. Prima sache! +1 :thumbup:

    lg Nero
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nero“ ()

    Nero schrieb:

    ps: Habe es zu spät gemerkt
    Bearbeite bitte mal Deinen letzten Post und lösche die werbeverwanzten Links raus.
    Kannst Du bitte mal Dein Projekt und den Taschenrechner auf ein niedrigeres Framework umstellen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ohne jetzt reinzugucken: Man bindet keine Resource in eine Exe ein.
    Man kann auf Designer-Ebene, aber auch auf Projekt-Ebene Resourcen einbinden, aber die werden dann als Extra-Dateien mitgeliefert, und nicht in die Exe reingestopft.
    .Net unterscheidet da zwischen Resourcen (das sind zur Laufzeit unveränderliche Datenbestände) und dem eiglich laufenden Programm.
    .Net stopft diese unterschiedlichen Sachen nicht in eine Datei.
    @RodFromGermany: Ok, die anderen Links sind draußen. Kannst du mir erklären wie man das mit den Framework macht? Wieso eigentlich?

    @ErfinderDesRades: Der Taschenrechner wurde zu Testzwecken hinzugefügt, damit man es in eine DLL Resource umwandelt. Danke, für deinen Rat.

    lg Nero

    Nero schrieb:

    Wieso eigentlich?
    Ich habe hier ein Studio 2010 mit dem Framework 4.0, trotz Editieren der Projektdateien möchte er gern das Framework 4.5 installieren, was ich nicht möchte.
    Ich weiß nicht, ob es in Deiner Express-Version genau so geht:
    Projekt -> Eigenschaften -> Kompilieren ==>
    Erweiterte Kompilier-Optionen ==>
    Zielframework (alle Konfigurationen)
    und dort eine 4.0 oder weniger auswählen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Nero: OK, läuft.
    Vielleicht ein paar Bemerkungen:

    VB.NET-Quellcode

    1. Dim path As String = "C:\WINDOWS\Temp\taschenrechner.exe"
    muss nicht funktionieren, wenn der Pfad nicht da ist.
    Verwende hier lieber die Systemvariable:

    VB.NET-Quellcode

    1. Dim temp = IO.Path.GetTempPath
    2. ' bzw.
    3. Dim path = IO.Path.Combine(IO.Path.GetTempPath, "taschenrechner.exe")
    In Deiner Prozedur vbplink1_LinkClicked() machst Du es richtig, in calcbutton1_Click() nicht: Shell() ist out, .NET verwendet Process.Start().
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: :D Prima. Soweit komme ich schon, nur ich habe erfahren das man irgendwie die Resourcen (sprich: Taschenrechner 1.0) in eine DLL einbindet und er starten soll, wenn man auf "Taschenrechner starten" klickt und er fügt nachher die taschenrechner.dll ins temp ordner und startet ihn. Vielleicht hat Wincrash die lösung.

    Taschenrechner.DLL erstellen und in eine Menü.EXE einbinden/starten

    Hallo Leute.

    Sry, das ich so lange nicht im Forum ON AIR war :) . Bis jetzt habe ich ganz oben eine Antwort bekommen vom Wincrash, der vielleicht die Lösung für mein Problem hat, denn ich noch nicht richig verstanden habe bzw. es selber nicht hinbekomme. Ich erkläre es gerne nocheinmal für alle, wo ich hinausmöchte mit der hoffnung das mir ein anderer helfen kann.

    Wie ihr schon mitbekommen habt, möchte ich mir ein Menü erstellen (zb. für Software, Bilder, Musik, etc.) für allmögchlichen zweck den es mittlerweile in der digitalen Welt so gibt. Hier sind noch einmal die von mir oben hochgelandenen Menü VBS für testzwecken und zur verständlichkeit:

    Basic Menü by Nero (Framework 4.5)

    Basic Menü by Nero (Framework 4.0)

    Als testzwecken soll ein Taschenrechner 1.0 von mir erstellt im Menü gestartet werden per Knopf druck auf "Taschenrechner starten". Vorher muss aber der Taschenrechner 1.0 (sprich die Resoursen) in eine DLL umgewandelt werden, damit man die eingebettete DLL Resourse im Menü starten kann. Die Resourcen DLL soll sich noch vorher im Windows Temp Verzeichnis entpacken und dann Normal gestartet werden. Nach dem Beenden vom Taschenrechner (Resoursen) soll sich die DLL wieder löschen, damit sich kein Datenmüll im Windows herumlungert und dadurch die Systembeschleunigung nicht um einiges reduziert.
    Natürlich habe ich im Basic Menü als Resoursen meinen Taschenrechner 1.0 hinzugefügt, damit ihr mir vielleicht per VBS erklären könnt wie ich es jetzt mit der taschenrechner.DLL im Menü starten kann?

    Bitte seit jetzt nich böse zu mir, wenn ich jetzt bei den ein oder anderen falsch liege. Ich bin neu in VB 2013 und dies soll mir erklären die man die sprachen versteht. Natürlich würde ich mich über Antworten, Feedback, Anmerkungen oder VBS Downloads freuen. Falls fragen aufkommen erkläre ich es gerne nocheinmal für alle, damit keine missverstände aufkommen.

    Nero schrieb:

    Nach dem Beenden vom Taschenrechner (Resoursen) soll sich die DLL wieder löschen, damit sich kein Datenmüll im Windows herumlungert
    Ein Programm kann sich nicht selbst löschen; eben war es noch eine Exe.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie macht es eigentlich WinRAR in diesem Video?
    youtube.com/watch?v=0uHedZBS8HY
    Ich möchte es auch dieselben funktionen ins Menü inplentieren.
    Sprich: Resoursen (zb. Taschenrechner) als DLL ins Menü --> DLL verschieben in temp --> vorhandene DLL überschreiben (verschieben & ersetzen ohne nachfrage) --> verschobene DLL datei ausblenden --> DLL Starten --> DLL wieder löschen mithilfe vom Menü.exe mit dem code [If Taschenrechner.DLL nicht gestartet/Offen ist then (=dann) lösche die Taschenrechner.DLL] else (=ansonsten) tu nichts und warte auf den befehl.

    Am ende ist das Menü nichts anderes als eine GUI Menü Portable.exe der Dateien startet/öffnet.

    Nero schrieb:

    Wie macht es eigentlich WinRAR in diesem Video?
    Da habe ein paar Leute ein paar Wochen dran programmiert.
    Und Du willst das jetzt einfach so nachprogrammieren?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Gonger96: Ja, ich möchte die Resoursen DLL (Taschenrechner) im Basic Menü starten, wenn man auf "Taschenrechner starten" klickt.
    Ists eine managed Dll oder Native?
    Kannst du mir kurz erklären was eine managed DLL und eine Native ist? Ich bin recht neu in VB 2013 und kenne noch nicht die ausdrucksweisen bzw die funktion.


    @RodFromGermany: In Visual Basic sind das nur ein paar Code snippet die geschrieben gehören. WinRAR ist außerdem noch ein unfangreiches Programm und hat mehr zu bieten als die funktionen die ich bereits aufgezählt habe und ist in verschiedenen Sprachen erhältlich, das kann schon mal dann länger dauern, wenn man es in richtigen sprachen übersetzen möchte.

    Sprich: Resoursen (zb. Taschenrechner) als DLL ins Menü --> DLL
    verschieben in temp --> vorhandene DLL überschreiben (verschieben
    & ersetzen ohne nachfrage) --> verschobene DLL datei ausblenden
    --> DLL Starten --> DLL wieder löschen mithilfe vom Menü.exe mit
    dem code [If Taschenrechner.DLL nicht gestartet/Offen ist then (=dann)
    lösche die Taschenrechner.DLL] else (=ansonsten) tu nichts und warte auf
    den befehl.
    Also managed (verwaltet) ist eine Dll die mit irgendner .Net Sprache erstellt wurde, sprich C#, VB.Net, F# , C++/CLI etc. Eine native (unmanaged) wurde mit einer nativen Sprache wie C, C++ geschrieben. Der größte Unterschied ist erstmal, dass eine Native nur kompillierten Maschinencode enthält und die Managed komp. ILcode. Eine Native müsstest du auf die Platte schreiben und Funktionen per LoadLibrary aufrufen und später wieder FreeLibrary aufrufen und die Dll löschen, ne .Net Dll kannste direkt aus den Resourcen benutzen.
    @Gonger96: Ich würd jetzt managed Dll sagen. Mit Visual (= Sehen, optisch) kann ich mir schon mehr darunter vorstellen. Wie es am ende in der Praxis das ergebnis aussieht, kann ich aber nichts darüber sagen, weil ich noch nie damit gearbeitet habe. Hört sich zumindestens schon vielversprechend an. :)