Welche DLLs benutzt mein Programm.

  • Ich möchte mein Autoit-Programm von einem bootfähigen USB-Stick aufrufen lassen. Über die Datei WinPeshl.ini lasse ich das Programm aufrufen. Aber es bringt einen Fehler, weil in der minimalen WindowsPE-Umgebung keine DLLs zur Verfügung stehen. Ich müsste also die von meinem Programm benötigten DLLs mit einbinden. Aber wie kann ich ermitteln, welche DLLs mein Programm während seiner Arbeit benötigt?

  • Die genaue Fehleraussage ist so:

    The Application has failedo start because its side-by-side configuration is incorrect. Please dee the application event log or usethe command-line sxstrace.exe tool for more detail.

    Ich glaube, dass es kein Programm gibt, welches eine .exe darauf untersuchen kann, ob sie eine DLL verwendet. Ich habe dann auch noch das Programm ListDLLs gefunden und das sagt:

    No matching processes were found.

    Mein Programm, mit welchem ich das Problem testen möchte hat zwar nur die eine Befehlszeile

    MsgBox(0,"Autonom","Hallo Welt")

    Aber trotzdem glaube ich, dass es auf jeden Fall DLLs benutzt.

    Meine Frage: Gibt es eine Möglichkeit ein Autoit-Programm so zu kompilieren, dass es die verwendeten DLLs mit einbindet? Sodass man es auf diese Weise auch in einer anderen Umgebung als windows 10 benutzen kann. Das wäre die einfachste Lösung.

  • Ich glaube, dass es kein Programm gibt, welches eine .exe darauf untersuchen kann, ob sie eine DLL verwendet.

    ? Genau das machen doch die von mir vorgeschlagenen Programme.
    Die sagen, welche Symbole in der PE-Datei stecken und auf welche DLLs diese gelinkt sind.
    Damit kannst du also ermitteln von welchen DLL-Dateien das jeweilige Programm abhängig ist.

    Gibt es eine Möglichkeit ein Autoit-Programm so zu kompilieren, dass es die verwendeten DLLs mit einbindet?

    Genau das ist ja das Gegenteil der Idee von Dlls: Wenn man die Inhalte einbindet wäre das eine statische Linkung und dann kann nur das jeweilige Programm diesen Code nutzen.
    Dlls hingegen verlagern den Code extern und ermöglichen so, dass verschiedene Programme den gleichen Code nutzen können.
    Wenn du Dlls dem Programm beifügen möchtest die nicht im System registriert sind, dann musst du sie im Grunde nur ins selbe Verzeichnis wie deine exe-Datei legen.

  • Entschuldige, dass ich mich etwas dümmlich anstelle:

    1. Dependencies > heruntergeladen und extrahiert.

    Dependencies.exe -apisets Autonom.exe

    bringt - so wie ich es sehe - eine Liste aller möglichen DLLs. Wie würde ich eine Liste aller von meinem Programm Autonom.exe verwendeten DLLs bekommen?

    1. PE-Bear > heruntergeladen und extrahiert.

    Aber wie nun weiter? Es gibt keine exe-Datei.

  • 1. PE-Bear > heruntergeladen und extrahiert.

    Aber wie nun weiter? Es gibt keine exe-Datei.

    Du hast doch dein Skript kompiliert oder nicht?
    Dann hast du doch deine Exe.
    Wenn man das mit deinem Beispielskript MsgBox(0,"Autonom","Hallo Welt") macht und diese .exe dann mit PE-Bear öffnet dann klickt man nur noch auf den Reiter "Imports" und dann siehst du direkt, welche DLL-Dateien er verwendet:

    Wenn du in der Liste einen Eintrag anklickst siehst du auch welche Funktionen er konkret aus der DLL bezieht.
    Die meisten DLLs wirst du nicht dazulegen müssen, da die bei Windows mitgeliefert werden.

  • In PE-Bear finde ich keine exe (z.B. PE-Bear.exe), mit welcher ich dann mein Programm öffnen könnte.

    Vielen Dank, dass du dir mit mir so viel Mühe gibst.

  • Tatsächlich!
    Ich hätte nicht gedacht, dass mein mickriges Testprogramm mit 18 DLLs arbeitet.

    Ich werde nun weiterexperimentieren und hoffe, dass die fehlenden DLLs die einzige Ursache für den Fehler unter Windows PE sind. Wenn es dich interessiert würde ich dir dann berichten.

    Nochmals vielen Dank!

  • Ich hätte nicht gedacht, dass mein mickriges Testprogramm mit 18 DLLs arbeitet.

    Dein Programm selbst nicht. Aber eine AutoIt-Exe ist nichts weiter als der Quellcode deines Programmes plus dem kompletten AutoIt-Interpreter. Und der stellt alle Funktionen von AutoIt zur Verfügung - egal was davon in deinem Skript genutzt wird oder nicht.

    Und das führt halt zu der relativ großen Anzahl an Abhängigkeiten.

  • Ach deshalb! Verstehe! Also kann man hoffen, wenn man größere Programme schreibt, dann kommt nicht mehr so viel dazu. Schön wäre es, wenn man das Ergebnis von PE-bear irgendwie als Textdatei ausgeben könnte, um die Zusammenstellung der benötigten DLLs mittels eines Programms zu automatisieren.

  • Ich habe schon einige Programm in AutoIT geschrieben und unter WinPE verwendet. Da wurde noch nie eine DLL nicht gefunden!

    Die PEs sind sowohl vom MDT-Server erstellt als auf mit den WinBuilder. Wenn Du nicht innerhalt von AutoIT einen DLL-Aufruf machst, muss Du nur darauf achten das es korrekt kompiliert ist (x86 oder x64).
    Normalerweise läßt ein x64 PE keine 32Bit Programme zu, außgenommen Du verwendest den PE-Builder und baust den 32Bit Teil mit ein.

    Was aber sein kann, ist das er den Pfad zu den DLLs nicht findet. Mache ein kleines Testprogramm und gibt es unter x:\windows\system32, überprüfe ob es geht!

    lg
    Racer

  • x64, das war der entscheidende Tipp.

    Vielen Dank Racer!!!!!!

    Mit anderen Worten: WinPE ist doch nicht so "mager" ausgestattet. Die DLLs sind alle mit an Bord. So jetzt werde ich mir noch ein Programm ausdenken, das den Prozess der Erstellung eines bootfähigen Datentägers weitgehend - ohne erhebliche Eingriffe - automatisiert.

    Vielen Dank euch dreien - Aspirinjunkie, UEZ und Racer.