DLL Datei ohne OpenFileDialog

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    DLL Datei ohne OpenFileDialog

    Hallo,

    Ich habe einen DLL Injector gebastelt (Bild)
    Jedoch möchte ich nicht immer auf "Browse" klicken und mit einem OpenFileDialog die Dll auswählen, sondern sie soll direkt bei Form Load ohne FileDialog geladen werden.
    Habe das bisher immer nur mit einer Txt Datei gesehen (TextBox1.Text = IO.File.ReadAllText("pfad.txt")) Aber wie funktioniert das mit einer DLL ?

    Vielen Dank für alle nützlichen Antworten & schönen Tag :)
    Bilder
    • injec.PNG

      4,78 kB, 368×327, 233 mal angesehen
    Interessant das du einen Injector schreiben kannst aber nicht die einfachsten Dateioperationen beherrscht.
    Naja hier ist was für dich:

    msdn.microsoft.com/de-de/libra…y.getfiles(v=vs.110).aspx

    Damit kannst du dir die Dateien holen die in einem Verzeichnis liegen. Denke der Rest erklärt sich von selbst.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Also Du hast eine Datei namens "pfad.txt" im Programmverzeichnis, in der der Dateipfad der DLL steht, die beim Start automatisch ausgewählt werden soll? Sehe ich das richtig?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ich dachte es wäre möglich vielleicht das wie bei dem Lesen des Text Dokumentes machen zu können.
    Also nicht so

    Text
    TextBox1.Text = IO.File.ReadAllText("pfad.txt")

    sonder so

    Listbox1.Items.Add(DllFileName) = IO.File.ReadAllText("G:\Datei.dll")

    Nur ReadAllText funktioniert bei einer DLL natürlich nicht :)
    Du scheinst da ein paar Dinge grob durcheinanderzubringen.

    1. System.IO.File.ReadAllText nimmt einen Dateipfad entgegen und gibt Dir den Inhalt der Datei zurück. Damit Du diese Funktion verwenden kannst, musst Du den Dateipfad der Datei kennen. Ist ja logisch, denn wenn Du nicht weißt, wo sich die Datei befindet, wie willst Du dann den Inhalt auslesen.

    2. Listbox1.Items.Add(X) fügt X zur ListBox hinzu. Listbox1.Items.Add(X) = Y macht keinen Sinn. Listbox1.Items(X) = Y ersetzt das Element am Index X mit Y. Vorausgesetzt es gibt bereits ein Element an diesem Index.

    3. Die Erweiterung einer Datei hat mit dem Inhalt nichts zu tun. Du kannst auch den Inhalt eines Word-dokuments in einer Datei mit der Endung .mp3 abspeichern. Dadurch wird nicht magisch eine MP3-Datei daraus und der Windows Media Player kann sie dadurch auch nicht magisch abspielen.
    Jede Datei beinhaltet einfach nur einen Haufen Bytes. Um diese Bytes auszulesen verwendet man System.IO.File.ReadAllBytes(P), wobei P der Dateipfad ist. Das gibt ein Byte-Array zurück, in dem dann ganz einfach die Bytes drin sind, die in der Datei stehen.
    Diese Bytes können alles mögliche bedeuten. Häufig will man aber Text in einer Datei ablegen. Text ist aber gänzlich anders als ein Array von Bytes. Text ist zum beispiel "Hallo Welt". Ein Byte-Array ist aber eine Aneinanderreihung von Zahlen von 0 bis 255. Wie kommt man jetzt von "Dem hier" zu {68, 101, 109, 32, 104, 105, 101, 114}? Dafür verwendet man Encodings. Das resultierende Byte-Array kann man dann problemlos in die Datei schreiben. Beim Auslesen muss man das gleiche Encoding verwenden, um wieder Text draus zu machen. Dafür verwendet man System.IO.File.ReadAllText(P, E), wobei P der Dateipfad und E das Encoding ist.
    Du kannst jede Datei mit ReadAllBytes und mit ReadAllText auslesen. Was davon Sinn macht, hängt vom Inhalt der Datei ab. Wenn es sich um eine DLL-Datei handelt, dann macht es keinen Sinn, ReadAllText zu verwenden, weil die Datei nicht (nur) Text beinhaltet. Das ist wohl das, was Du mit "funktioniert bei einer DLL natürlich nicht" meinst. Funktionieren tut es schon, es kommt nur nichts Nützliches dabei heraus.

    Stelle Deine Frage also mit diesem Wissen ausgerüstet nochmal. Überlege genau, was Du eigentlich machen willst und erkläre es uns so, als ob wir keine Ahnung davon hätten. Denn wir wissen nicht, was Du weißt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Also das passiert, beim OpenFileDialog :

    Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    Dim FileName As String
    FileName = OpenFileDialog1.FileName.Substring(OpenFileDialog1.FileName.LastIndexOf("\"))
    Dim DllFileName As String = FileName.Replace("\", "")
    Me.DLLs.Items.Add(DllFileName)
    End Sub

    "DLLs" ist die Listbox

    Und das was da passiert möchte ich automatisch beim Start und ohne OpenFileDialog.
    Und der Pfad zur Datei, die ich laden möchte ist : "G:\Datei.dll"
    Hallo

    Hab heute meinen lustigen Tag.

    TomTheCoder15 schrieb:

    Me.DLLs.Items.Add(DllFileName)


    TomTheCoder15 schrieb:

    Und das was da passiert möchte ich automatisch beim Start und ohne OpenFileDialog.
    Und der Pfad zur Datei, die ich laden möchte ist : "G:\Datei.dll"

    Dann Me.DLLs.Items.Add("G:\Datei.dll")
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hey,

    1) Bitte nutze die Code-Tags! Das macht deinen Code übersichtlich.
    2) Ich würde einfach die dll in die Ressourcen packen und mir bei StartUp die Bytes krallen und diese an eine bestimmte Stelle hinschreiben. Dann kannst du sicher sein, dass die DLL da ist. Letztendlich musst du einfach nur auf diese DLL zugreifen. (Statt dem OpenFileDialog.FileName Kram einfach deinen Pfad als String)

    LG
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Hallo.

    Du musst die DLL erstmal entpacken (In einen spezifizierten Ordner.)
    Wenn du nicht weißt, wie du das hinbekommst: Guckst du hier.

    Dann kannst du einfach den Pfad nehmen und den verwenden in deiner Injection Function.
    (Sollte ca so aussehen:

    VB.NET-Quellcode

    1. 'In einer Sub:
    2. InjectDLL("Dein Pfad")


    LG
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Also wenn ich die Posts vom TE lese geht es hier um etwas viel trivialeres. Ich kann mich irren aber wir/ihr lassen/lässt euch zu viel davon beeinflussen davon das er meint er hätte einen Injector gebaut. Ich denke er möchte tatsächlich nur den Pfad der dll oder nur den Dateinamen dieser in die Listbox bekommen.

    Oder?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Da ist das Problem @Nofear23m. Dann muss er eine ordentliche Beschreibung dessen machen was er nun will.
    Deshalb sagte ich ja auch schon das es sehr komisch ist das jemand einen "injector" schreibt aber sich null mit dem Basics auskennt.

    Also @TomTheCoder15 schreib uns mal bitte was du nun möchtest...
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Das witzige ist das meine Antwort ja dann im Grunde seine Lösung wäre, aber auf die geht er nicht mal ein.

    Sollche Threads gefallen mir irgendwie immer.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich möchte nicht den Pfad in der ListBox haben, sondern nur den Dateinamen. Das ist aber ermal nebensächlich. Ich möchte nur, dass meine DLL wie auch immer als DLL genommen wird, die letztendlich injected wird.
    Es funktioniert ja auch alles MIT einem OpenFileDialog aber es muss doch auch so funkionieren, dass man nicht erst mit einem OpenFileDialog die Datei auswählen muss, sondern der Pfad schon vor liegt und die Datei schon ausgewählt ist.
    Wir verstehen aber nun nicht wo das problem ist. Du schreibst das wenn du dir den Dateinamen vom OpenFileDialog in deine Listbox (besser ins ListBoxItem) holst, alles funzt.
    OK, und wenn du die Datei reinschreibst so wie ich es gezeigt habe funzt es nicht. Der Code macht nichts anderes wie der OpenfileDialog, nur eben ohne diesem.

    Bitte(!!!) versuche Code nicht einfach per Copy&Paste einzufügen sondern zu verstehen. Du weist nicht mal was bei dem Code den du hast abläuft, so wirkt es.
    Denn sonst hättest du dir echt schon viel Zeit gesparrt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##