Fremddateien "includen" (ohne FileInstall)

    • Offizieller Beitrag

    Hi,
    nun im zweiten Anlauf, da der erste Thread sich nicht mehr öffnen ließ:

    Wer sich schon mal näher die Funktion _SQLiteStartUp() in der SQLite-UDF angesehen hat, wird bemerkt haben, dass hier die SQLite Dll geladen wird, ohne dass sie auf dem System installiert ist.
    Das wird gelöst, indem der Inhalt der Dll als Binärstring innerhalb des Includes gespeichert ist und zur Laufzeit temporär die Datei erstellt wird.
    Daraus ergibt sich der Vorteil, dass man nur die reine EXE weitergibt und alle weiteren notwendigen Komponenten (Dll, Bilder etc.) nur temporär generiert.
    Da ich diese Methode in letzter Zeit häufiger nutze, habe ich auch die Erstellung des Binärstrings und der Helperfunktion automatisiert.

    Mit dem Aufruf der Funktion: _CreateTmpBinaryCall($sPath, $sBin='$sData') wird die mit $sPath übergebene Datei als Binärstring in der Variablen $sBin gespeichert. Der Variablenname darf 29 89 Zeichen nicht überschreiten, da sonst die max. Länge einer Befehlszeile überchritten wird.
    Weiterhin wird die Funktion _CreateTmpFile($sFileName, $sBin) erstellt. Diese gibt den Pfad der temporär erzeugten Datei für den übergebenen Binärstring zurück.
    Der erstellte String und die Funktion werden sowohl in die Console als auch in die Zwischenablage ausgegeben.

    Edit 17.9.2011 NEU v1.3
    • Der temporäre Pfad kann ein Direktpfad sein oder eines der Makros @ScriptDir / @TempDir. Die Makros dürfen jedoch nicht als solche übergeben werden, da dann der Pfad sofort gewandelt wird, statt das Makro in die Funktionen einzusetzen. Als Standard (mit Default od. Leerstring) wird @ScriptDir verwendet, für @TempDir muß 'tmp' übergeben werden.
    • Noch ein bischen Funktionskosmetik durchgeführt

    Edit 21.8.2011 NEU v1.1
    Schnuffel hatte eine Idee zur Funktionserweiterung, die ich beim Korrektur lesen noch etwas ausgefeilt habe und herausgekommen aus diesem Brainstorming ist dieses:
    • Übergabe nicht nur einer Datei, sondern eines Strings mit mehreren Pfaden möglich (Trenner: GUIDataSeparatorChar, Standard also: '|')
    • Wird kein Datei-Pfad übergeben, öffnet sich ein Fenster zur Dateiauswahl (auch Multiselect möglich)
    • Der temporäre Pfad ist jetzt wählbar
    • Eine Funktion zur automatischen Löschung der temporären Dateien bei Skriptende, wird bei Bedarf miterstellt
    • Ausgabe in die Konsole erfolgt nicht mehr (Zwischenablage reicht)

    Edit2 21.08.2011
    Grrr, da hatte ich noch einen Bug drin. FileSelectFolder (also kein Pfad übergeben) mit nur einer Datei führte zu einem Fehler - gefixt.

    Hier werden String und Funktion erstellt

    v 1.3
    [autoit]


    #Region - TimeStamp
    ; 2011-09-17 13:12:56 v 1.3
    #EndRegion - TimeStamp

    [/autoit] [autoit][/autoit] [autoit]

    ; Local $gifPath1 = 'C:\WINDOWS\system32\oobe\images\merlin.gif' ; -- XP
    ; Local $gifPath2 = 'C:\WINDOWS\system32\oobe\images\hand2.gif' ; -- XP
    Local $gifPath1 = 'C:\Windows\System32\migwiz\PostMigRes\Web\base_images\System.gif' ; -- Win7
    Local $gifPath2 = 'C:\Windows\System32\migwiz\PostMigRes\Web\base_images\Programs.gif' ; -- Win7
    _CreateTmpBinaryCall($gifPath1 & '|' & $gifPath2)

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name..: _CreateTmpBinaryCall($sPath = '', $sBin='$bData', $sSavePath = @ScriptDir, $fFilesDelete = True)
    ; Description....: Erzeugt einen Binärstring der übergebenen Datei/en und erstellt eine Funktion um
    ; durch Aufruf des Strings die Datei temporär zu erstellen.
    ; Parameter(s)...: $sPath - Pfad der Datei/en, von der/denen ein Binärstring erstellt werden soll; GUIDataSeparatorChar als Trenner
    ; optional.: $sBin - Name der Variablen, die den String aufnehmen soll, max. Länge Variablenname: 89 Zeichen (Standard = $bData)
    ; optional.: $sSavePath - Pfad, in dem die temporären Dateien abgelegt werden (abschließender Backslash nicht zwingend, skriptgesteuert)
    ; • Default od. Leerstring setzt das Makro @ScriptDir ein (Standard)
    ; • 'tmp' setzt das Makro @TempDir ein
    ; Achtung: Hier KEIN Makro direkt verwenden, da dann der Pfad sofort gewandelt wird, statt das Makro in die Funktionen einzufügen
    ; $fFilesDelete - (True/False) Switch der festlegt, ob die Funktion zum Löschen der Tmp-Daten bei Skriptende erstellt werden soll
    ; Return Value(s): Erfolg - 1 Ausgabe des Strings und der Funktion _CreateTmpFile() in der Zwischenablage
    ; Fehler - 0 Set @error; 1 - keine Datei ausgewählt,
    ; 2 - Datei konnte nicht geöffnet werden (@Extended = n-te Datei, die den Fehler erzeugte)
    ; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
    ; Modified.......: Schnuffel ([email='schnuffel@autoit.de'][/email])
    ;==================================================================================================
    Func _CreateTmpBinaryCall($sPath = '', $sBin = '$bData', $sSavePath = Default, $fFilesDelete = True)
    Local $sSeparator = Opt('GUIDataSeparatorChar')
    If $sPath = '' Then
    $sPath = FileOpenDialog('Datei/-en zum binären Includen auswählen:', @ScriptDir & '\', 'Alle Dateien (*.*)', 4)
    If $sPath = '' Then Return SetError(1,0,0)
    Local $aTmp = StringSplit($sPath, '|', 2), $ubound = UBound($aTmp)
    $sPath = ''
    If $ubound = 1 Then
    $sPath = $aTmp[0]
    Else
    For $i = 1 To $ubound -1
    $sPath &= $aTmp[0] & '\' & $aTmp[$i] & $sSeparator
    Next
    $sPath = StringTrimRight($sPath, StringLen($sSeparator))
    EndIf
    EndIf
    If $sBin = '' Or IsKeyword($sBin) Then $sBin = '$bData'
    If Not IsBool($fFilesDelete) Then $fFilesDelete = True
    If $sSavePath = '' Or $sSavePath = Default Then
    $sSavePath = '@ScriptDir & "\"'
    ElseIf $sSavePath = 'tmp' Then
    $sSavePath = '@TempDir & "\"'
    Else
    If StringRight($sSavePath,1) <> '\' Then $sSavePath &= '\'
    EndIf
    If StringLeft($sSavePath, 1) <> '@' Then $sSavePath = '"' & $sSavePath & '"'

    [/autoit] [autoit][/autoit] [autoit]

    ; == Deklarieren der lokalen Variablen
    Local $sToWrite, $hFile = '', $bRead = '', $sLen = '', $nCount = 4000, $aTrimPath, $aFilenames = '['
    Local $aSplitPaths = StringSplit($sPath, $sSeparator, 3)
    $ubound = UBound($aSplitPaths)
    Local $aFiles[$ubound+1][2]
    $aFiles[0][0] = $ubound
    For $i = 1 To $aFiles[0][0]
    $aFiles[$i][0] = $aSplitPaths[$i-1]
    $aFiles[$i][1] = StringRight($aSplitPaths[$i-1], StringLen($aSplitPaths[$i-1])-StringInStr($aSplitPaths[$i-1], '\', 1, -1))
    $aFilenames &= '"' & $aFiles[$i][1] & '"' & ','
    Next
    $aFilenames = StringTrimRight($aFilenames,1) & ']'
    $sToWrite = 'Global $sPath = ' & $sSavePath & ', ' & $sBin & '[' & $aFiles[0][0]+1 & '] = [' & $aFiles[0][0] & ']' & @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    ; == Dateien binär einlesen
    For $i = 1 To $aFiles[0][0]
    $hFile = FileOpen($aFiles[$i][0], 16)
    If @error Then Return SetError(2, $i, 0)
    $bRead = FileRead($hFile)
    FileClose($hFile)
    $sLen = StringLen($bRead)
    $sToWrite &= ';' & @TAB & 'String mit den Binärdaten von: ' & $aFiles[$i][1] & @CRLF
    If $sLen < $nCount Then
    $sToWrite &= $sBin & '[' & $i & ']' & ' &= "' & $bRead & '"' & @CRLF
    Else
    While 1
    $sToWrite &= $sBin & '[' & $i & ']' & ' &= "' & StringLeft($bRead, $nCount) & '"' & @CRLF
    $bRead = StringTrimLeft($bRead, $nCount)
    $sLen = StringLen($bRead)
    If $sLen <= $nCount Then
    $sToWrite &= $sBin & '[' & $i & ']' & ' &= "' & $bRead & '"' & @CRLF
    ExitLoop
    EndIf
    WEnd
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; == Ausgabe String Erstellen
    $sToWrite &= @CRLF & ';' & @TAB & 'erstellt im TEMPDIR die Datei/-en aus allen vorhandenen ' & $sBin & ' Variablen' & @CRLF
    $sToWrite &= 'Global '&$sBin&'names['&$aFiles[0][0]&'] = ' & $aFilenames & @CRLF
    $sToWrite &= 'For $i = 1 To ' & $sBin & '[0]' & @CRLF
    $sToWrite &= @TAB & 'Local $sFile = $sPath & ' & $sBin & 'names[$i -1]' & @CRLF
    $sToWrite &= @TAB & 'Local $hFileOut = FileOpen($sFile, 2+8+16)' & @CRLF
    $sToWrite &= @TAB & 'FileWrite($hFileOut, Binary(' & $sBin & '[$i]' & '))' & @CRLF
    $sToWrite &= @TAB & 'FileClose($hFileOut)' & @CRLF & 'Next' & @CRLF & @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    ; == Schreibt eine Funktion zum Löschen der Dateien bei Skriptende wenn $fFilesDelete = True
    If $fFilesDelete Then
    $sToWrite &= '; registriert die Funktion "_DelBinaryTempFiles()", damit die temporär erstellten Dateien bei Beendigung wieder gelöscht werden' & @CRLF
    $sToWrite &= 'OnAutoItExitRegister("_DelBinaryTempFiles")' & @CRLF & @CRLF
    $sToWrite &= 'Func _DelBinaryTempFiles()' & @CRLF
    $sToWrite &= @TAB & 'For $i = 1 To ' & $sBin & '[0]' & @CRLF
    $sToWrite &= @TAB & @TAB & 'FileDelete($sPath & ' & $sBin & 'names[$i -1]'& ')' & @CRLF & @TAB & 'Next' & @CRLF
    $sToWrite &= 'EndFunc' & @CRLF
    EndIf
    ; == Kopieren der Daten in die Zwischenablage
    ClipPut('')
    If ClipPut($sToWrite) = 1 Then
    Return MsgBox(64 + 262144, 'Daten kopiert', 'Die Daten wurden in die Zwischenablage kopiert.' & @CRLF & 'Einfügen in Ihr Script mit Ctrl + v.',5)
    Else
    MsgBox(64 + 262144, 'Fehler - Daten kopieren', 'Die Daten konnten nicht in die Zwischenablage kopiert werden.')
    Return 0
    EndIf
    EndFunc ;==>_CreateTmpBinaryCall

    [/autoit]

    Und das ist das Ergebnis zum Einfügen in das Skript:

    Spoiler anzeigen
    [autoit]

    Global $sPath = @ScriptDir & "\", $bData[3] = [2]
    ; String mit den Binärdaten von: System.gif
    $bData[1] &= "0x4749463839613000300077000021F904010000F2002C0000000030003000871A19191F23372D2D2D25293B2E313E3636382D31423639453C404B3E4758385874403E3A44413A454548494A534E5057504E48504F5354524D565658435C745C5D63565F77576178605F6569675E67676A696A72706F7570706F757577072AAC082CB20935BB1736AD193AB6203EB70339C70036D2193CC11C41BC2744B8324EB73B53AC3954BA0742CA0747D51746C7144AD21F52CD2548C7264ED22B55CA2654D4304EC53853C63659D32D5DE03B67CA3D66DC4F5F83415ABD5B6C984B65B6516BA85364B75165BD5D6CB25C6EB85E72B46A748B6D77907B7C846277A76A79B5717DB4435AC3425CCA485EC3435ED14269C94C62C24A62CB4766D84E73DC5165C55166CB5369C35569CC586EC6596CCB536BD4536CDB596ED25478CA5A72C35D72C95374DB5C73DB5C7ED55C7BDF4769E54D75E2516DE45473E15371EA577EE7517AE85B75E45974EB5A78EC6274CE6378CB687CCC6073D46277DC6579DD6E7FD4647BE3607AEB6A7FE5687FEB607BF05C81E66A88D47C8BD47B94D26481E0648AEA6986E36A82EC6C88E66B8CE86780F16D85F16E92EC738DE57796EB769DF07C92F67FA2E3888889898A9387939E97979A818BB6818DBC9B9DA698A1AA9EA7B49EA5BCABAAAAA6AABBABAEBBA4B2BDB3B3B3B3B3BBBCBCBE8E9AD3929AC1819BEB8296F18199F388A4DB99A1C396A9D097ACD99CB1C182A3E385A4EE8DA4ED8BABEE89A8F091A8EF91A9F099ACF699B3EA94B1F09CB4F19CB9F1A1A7C4A3ABC1ABB6CEA0B0D7A3B3DAAAB6D0B5BACBBABCC2A4B8E7A0B9EFAABAEBA4BBF1A9BCF3AFBEF8A9C0D2BFC0C1BEC2CAB2CADCBAC2D4BCC4DCB9CEDFACC1F2B5C0E3B4CFE6B9C3E1BFC8E2B2C4F3B7C9F4BBCBF5BDD1E1C3C3C4C2C2C8C6C9CDCBCBCBC2C6D3C2CAD9CBCBD2CFCFD8C1D0DBCED0D3CCD0D8D1D0CED3D3D5D4D4DBD9D8D7DBDBDCC0CFF6C0CCFCC6D7E6C5D2F6C2D1F8CBD7F7CAD7FAD8DCE4D2DCFAD7E2ECDBE7F1E4E4E5E4E4EAEBEBEDE8ECF1EBF1F7FFFFE5F2F2F4F3F8FBF9F8F5FEFEFECEA4D6083053000000000100F5F578000002CEA4B4CEA49FF5F57408FF00E5091C48B0A0C18308132A5CC8B0A1C38710234A9C48B1A2C58B18336A1CF86E23454C9F68E9CAF62D5C388F0C2355D1F2A64E9F3E9E701DBBC60D1C386FE0500E5C52A58B1C3A74F008126428942F65CC9ACDE4E6AD9AB46ADD30B61B52058B4F3A76F0E429B4689C3A74E6A039F3C50BD7AD5CC6AC11EB368CA2B72051AC581583F58E1E43C1D49D2B572EECB367C180F58285AAD4268AC484449162650B17316CD8B4D1F36AAF3871D09E39DBBC39D92C5C97285A0253C589942D8ED1B04993461434CC9A9D259B9DECD7AF55C20E4F8C04070C932652A64CE172264D1943C09C3D4B060C98EDE7B350E9AAA8040E1C27BF9F082F73A68C1B57819DCBFFEA35ABFCAC588CDA4E7C47E44D1C272C7E37D13E853BA857B2F2E38FC57F152B469D5014CE0F59C051050B3724D8040E4FE0508620ADA8E2CA84FEB1924A2A8A8CA29E44BAB070451655DCA0428237E060220E7380A2A22A17AAA888228098220D45A4A81085622CA860C38E3B9AC805228824920828421E62E41EB8CC38912429F4E0240B2944B9A30C36CC30C51F83043208218400D225206BD832CD44F51491428E2AA810650A32B429C30C38A041C69C7BFCB1871A6AAC11063114BDB3020929A8990209849270420A27503945185434BA8619909631463514A523820884627AE90823187A42A23808F7C40E53EC606A0E7C282991311F7C70E9AB2274FF8A820C28244AC38938E4906B0E35F8A16A44B5A8290208AD8210EB0828242B430C34345BC30C33D4F02C0CA6504351071D2061840F45B0506B08E09E10C2092FC400C30BE8BE00C3BA2F58C38D458D643041061D6C7044122CD0F0420B25F4DBC2BFFEAE4BC3361A3552C10412483001061BF0000414E6BA6082BF2EB4A003A5114DE308124870B0C1061C70A0C1040B2CD00004109C3CC1041724F1030D119BE005C10FEDE288060FAC3C41051A7CBC41050E2C5080004417C040030C300081041558E0C317B7FCAA10278D6C104103113CD000020838D040051F77A0010613346076030E682076051008CD40051E30B48D2356373041040E20A0F5D60E10FF700002093830C106F562707004116810513B2479B389231E687035D6662780C0010D1C6080DF0774BE33062353A08003712F940E3624A5D38E3BEFB8E34D27907000F4027F777E40029D1B70C000010C60C0E5095080C002083492D037E97CA3BCEAACBF338F3DEF5CD2C8F41B3C70B9ED0618E0BBF603746F4003051050C0020A41B2CB37EEA4CFFA3CF348D308B6D94E0FF9040810E0FBF6BE07F07701FC03E0102490C0863BD8178E616C62128D4082D8E6B58975586312487840F60CD0BBCE15007CE48B482320C18970CCA31EEDA8C6302081844678231EF060073BD6A10D4D3C620381139A030AD0818B386212D868C73CDA110E7BD8031EF058C73A50C8414472144318A7A0C4061AE0112470301D3EA4470A87488E682CA318CB408602752290044E821AF088C70AAB180D725402035C3C88071C918975AC501B1ED8401A1582841BCA718E78CCA31E311210003B"
    ; String mit den Binärdaten von: Programs.gif
    $bData[2] &= "0x4749463839613000300077000021F904010000F7002C0000000030003000871615151C1C1C1F212020222129292A2F2F303131325A5A5E4646645E5E615655745F7173606060666B696A6B6B62617F6E6C737374747679787A7A7B62628268678E6C6C897376877272937A7A937D7D9A7A7AA47E7EAE598668688A7976897C76907F65C26C5D97A65CAA9D6E91807F81807A968A6FA68D86AC7C95AE7281D93C93EB18A5F62884CD5FA1C07EA6E446D7AC67D2AF7C8989898282988E908F829D9187989D8E97978B9C95908C8D928F9194948E93939392959B949B9B9A95979A949A9A9A9A8282A18585AE8A8AA48C8CAA8585B18B8BB38C8CBC8F90AB8F98A69293AC979AAE9A9AAB9494B19393B99A9AB49C9CB986A2968BB49884A8B894A3A091A9A09CA5A69FA7A99EA9A49AA9ADA4959FA89AA3A1A29FA9B29CBEB19DA3A3A3A1A1ADA0AAA6A4ABABA8A3A6ABA6AAABAFA5ABABACA4A4B2A2A2BCA5AAB1A9A9B4ACACBAA5B2ABADB2B5AFB0BAACB9B6ACB9B8B4A8A9B6AAB7B4B4A7B5B9ABBBB2A8B3B3B3B2B2BCB3BCBBBAB1B7BCB3BBBABBBB9393C39999C3A4A4C1A9A9C4ACACC9A6A6D5AAAAD7AEB5C1B4B4C4B2B2CCB7B8C1BABAC4BBBBCBB5B5D2B0B0D9BBBBD3BCBCDAB9B9E5BDBDE9B0CD84ADCCB5BDC3AAB4C4BDB4CDBAB9C6BEB8CABEB5D1BDB6C1C0BDC3C2BACAC2BDD5C4D7B98AD6BC9BC1ACBAC4B6A4C4BDBBD4BEA3E2BB89E1BF90C1BCC2E1BBC6E7BBD1DAC08CD2C098CEC2AAC5C0B9DCC6A8D7C8B8D6D2A5D6D2B5EDC487EAC896F3D589F1D693E6CBA3EDD0A4EED3ADECD9AFEBD7B8F1D3AAF0D8A4F9DEBBE9E7A9F9EEADF6E5B1C6C7C7C4C3D2C3C3DBC6CFD0C9C7DCCAC9D4CDCDDCC5D2CDCED1D2C8DBD0D1C3CCD8C9D5D7D4C9D2D2D3D3D3DCD3D9D7D4D9DBDBDBDCC4C4E3C4C4EECBCBE4CCCCEBCACAF2CDCDFCCFD0E2D4D4E2D2D2EAD7DCE0DADBE3DADAE9D4D4F4D3D3FDDADAF2DCDCFCD2E2D7D5E2DCDDE1E4DFE8E8E5C4C9E3DBCEEDDFCFE1DCDCF5D0C7E2DFE0E5E2DBE4E4E4E4E4ECE6E8EBE8E8E7EAEAEBE3E3F3E3E3FCEBEDF2EBEBFDEEF1F5EFF0FEF0EFEFFFFFE5F3F4F4F3F3FDFEFEFEF5F578000002CEA4B4CEA49FF5F57408FF00EF091C48B0A0C18308132A5CC8B0A14383519CA409C44898356C0F33264CA348912143810001FA930690A25F16B769441868A2224002A15CBB664DD82F468C3E8E4C13250D4F2850A244F90353E31245DC80A51156115EBB76ECA2B2F346151B3460C01A7554142824A0344603716BF4C710206BECDABD7BD70E1EBC7870E37D9BDBAD1B376ED4A8457B2448A3933FD25EF2DC064F6A5AB76FBFC9A55BB75BB56A8F903CE9F330C99F46148BFCC197AF73BE7AF3E6259E4BBAB1634747FC0C7AF290C8C7344988382954D11AE1D09DE7D55B6CFAB19F23D01641699D868810211A10287860410391255100D10626CD1BDCD2D5061931442D4A4627D7E8C9FF1337AC109A24192C50A0600183062144924437C4081AB4BC1C9E406B34FCA1136D9DE9A34F3E03E6630F3BC42462481449143144114938F1C4507F3C614420FCF905A06703E2130E38047A26DA36D848038C478154B04121C248534443F80CC4C435017616CE26975C328E679FD5D3633EF3C4A38F06851043CC2F4730148103413CB3CC1967E07148269A587209259144728C67F580165A5CDFE8F3061A6F2492C8100C31100004F6E893491C715C71430F58A8E1061C9354E24C39B6C8124B2CB99803A63E68848187994430E4000112BCA34F33796A520C26946212071DA1B0A28A2AACA4F2092AA3B0625D9868A051889942300401011338DA8C269914FF638C2FCB9CB3CE3BEADC524B2DABA4B24A279D7C62072B72E9B3061A871E92EA428B4ED08E3ECF64920928A4D0FA8C3B6DE6936B2DB3CC02CB2BA27CC1C934DE188B6C22852CAB9003054CE08E3EC6F071071FA404B34C3AD8EA63CF3AE7DC820B2DDE8EF2090CD37063ACA1A82AC9A83BEBF001C619778062AD3BF8E0634F3ACE2C534B2EB0C0324A2A041BBCC61ABF5CF38BBA0949C0EA3AA480114419F366B2CCB515BBF38C2F992043CBB702C3208DC16F20F2CB2FE92A3C813190A4004417108362CC39EF18B8CE3299C8CB0ACF9FC450B0B16B045DF44211B0CA070B2BA410C4C37CF8F2CC3B169FE38BBC4C7F7BCA17A0FC7C702137A18C10040640FF10C40B2BA880421064DC2133DBEBC47B061941F4F0C92B9C7C220D34D8E8C3C61BBF6C238CDE074960400232D4E1420B219CE043193237734E337CC8D1C50F34C8D0C52B317C62DF34FAE051F236C0706E90040524C0831E6F9831C508221CF28E78EBF8E272EC32E4D045279CD8010C34B8E3318C6DBD33E4F90125902106C45A50910D3EE264335E173900C1C5FB5B90320C1F8D0093FD2FC4F0EE7B410E1870800441E0C10F821084333C251370C8063D48013F1EE4400678004621EA078DDCE14F7F4AFA5C0478A0031AD0400765608B26DA100C7AF84206D1A3C103CF90884330A21115D41DF7F6479009102002B223831CE6E0893D88831ED9D08433FF4C8842153E100C89C08322EA67416660702125180000CBE0093DE8E10C41E08378DA210F7924630E3F28A20C904808432CD1823364481425400A1EDCE10C2ECB41109AD1C5F120C314A5B0030F50588642BCC18C8DB060FE36C790090C0002EBE00118BAC0031AF00062BE10875A96810C72A0831576D8C11A0EA1864098B189DB20060D0712C506D8831425809D0EBA20AFC3E1C31DB362852E7AD18A4320E20A80F0242845C910190CA0016C43"
    $bData[2] &= "210F82708762D22A1D154B873140C10A5EEC821088A802510C81C66D306394022981001AF0AE44C8E06C6F4CDBBDEC818F773CC318A4708524B490071C40E10F819007E6F2670D6CDE238A0EA09830F000FF062F98615E13AB5933D0690529B4C1044A208A36D8803F765CC39E130080031C250E61F8C20C1013E7B5DAB4AF65B4410A060581097CB2D05FA085970C294317D6E60E77C8A319C5CC84B56E25A075C00107201D03083CC084343C830DC3204650ED4990A939C319EF705BB58CF18C5BC1F2A352A88114C400820ED8000AC3580322F0708DEEADE41EDAB886337CE10B63206319B3E283156A600213D4200B1FE8000998908826B0C11A50204221BE5A9062C0CA18E96893368A3189B5B6E1020BF0C012DEC00636CC20097C4D48338AE10B659CE319F6C8473832F186195CC00250C80011D010D986944319AC28873A32311044182711A5D5082B9611DBDA03463620003B"

    [/autoit] [autoit][/autoit] [autoit]

    ; erstellt im TEMPDIR die Datei/-en aus allen vorhandenen $bData Variablen
    Global $bDatanames[2] = ["System.gif","Programs.gif"]
    For $i = 1 To $bData[0]
    Local $sFile = $sPath & $bDatanames[$i -1]
    Local $hFileOut = FileOpen($sFile, 2+8+16)
    FileWrite($hFileOut, Binary($bData[$i]))
    FileClose($hFileOut)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; registriert die Funktion "_DelBinaryTempFiles()", damit die temporär erstellten Dateien bei Beendigung wieder gelöscht werden
    OnAutoItExitRegister("_DelBinaryTempFiles")

    [/autoit] [autoit][/autoit] [autoit]

    Func _DelBinaryTempFiles()
    For $i = 1 To $bData[0]
    FileDelete($sPath & $bDatanames[$i -1])
    Next
    EndFunc

    [/autoit]
  • Es läuft einwandfrei !!!!

    Also jetzt habe ich es auch verstanden, was das Script machen soll.

    Frage:
    Geht das nur mit Bildern, oder kann man so auch Dateien (z. B. Textdateien) in ein Script einarbeiten und wenn es benötigt wird, das dann die Datei z. B. erst erstellt wird?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Sollte mit allen Dateien gehen, die werden ja im binär-Mode gelesen!

  • Hallo bernd670.

    Habe ich Dich jetzt richtig verstanden? Ich brauche die Dateien dann gar nicht mehr (so wie bei FileInclude) erst auf die HDD "entpacken" lassen, sondern er ließt das aus dem binärcode aus? Wäre ja mal wieder was, wo ich es kaum glauben kann es es geht. Aber ich bin ja eine Userin, die immer für neue Sachen zu haben ist.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hi,
    schönes Script :), auch wenn das schon oft umgesetzt wurde ...
    Aber mal ne Frage. Wo ist der Vorteil zu FileInstall. Wenn die Dateien jetzt nicht temporär abgelegt werden müssten, würd ich einen Vorteil sehen, aber eigentlich hat das Script doch genau den gleichen Effekt wie FIleInstall.

    anno2008

  • Gut wäre es, wenn die temporär Datei hundertprozentig sicher zu löschen wäre.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Geht das nur mit Bildern, oder kann man so auch Dateien (z. B. Textdateien) in ein Script einarbeiten und wenn es benötigt wird, das dann die Datei z. B. erst erstellt wird?


    Wie Bernd schon sagte: Geht mit allen Dateien. Aber bei Text ist es nun nicht notwendig, den kannst du ja im Klartext speichern.
    Ich verwende es auch um integrierte Dateien 'unsichtbar' zu halten. Nicht, damit der User nix von weiß, sondern um dem Urheberrechtschutz Genüge zu tun. So kann der User nicht direkt auf das eingebundene Material zugreifen.

    Aber mit FileInstall hab ich doch auch nur 1 Datei?


    Aber nicht mehr nach dem ersten Run. Dann hast du die EXE plus per FileInstall installierte Dateien.
    Mit dieser Methode hast du immer nur die EXE.


  • Aber nicht mehr nach dem ersten Run. Dann hast du die EXE plus per FileInstall installierte Dateien.
    Mit dieser Methode hast du immer nur die EXE.

    Sry, dass ich nochmal so blöd nachfrage, aber irgendwie gibt das keinen so richtigen Sinn für mich.
    Wenn ich eine Datei mit FileInstall eingebunden hab und starte das Script, dann werden die eingebundenen Dateien in einen Ordner auf dem PC kopiert (z.B. TempDir).

    - So, dann hab ich also die EXE-Datei (wo die Original eingebundenen Dateien drin sind) und die Dateien auf dem PC in TempDir.
    - Bei deiner Lösung hab ich die EXE-Datei (wo die Dateien halt binär drin sind, aber genauso viel Speicherplatz wegnehmen) und die Dateien auf dem PC in TempDir.

    Ist das jetzt nicht genau das gleiche, oder mache ich irgendwo einen Denkfehler?

    anno2008

  • Erstmal keine schlechte Idee. Ist eigentlich sehr praktisch.

    Habe aber auch mal eine Frage und zwar ließe es sich machen, dass man z.b. eine .Txt Dtei "includet", diese dann während des Programmlaufes ändert und dann wieder einspeichert?

    MfG
    Conan (Nur Mitlesend)
    Schon lange dabei

  • Hallo.

    Habe gerade mal einen Vergleich durchgeführt "FileInstall" ./. "BinärInstall"
    (BinärInstall = Fremddateien "include" ohne FileInstall)


    "FileInstall" ./. "BinärInstall"
    Dateigröße der au3-Datei: 6.958 ./. 14.229 (wobei die Bilddateigröße mitgerechnet wurde)
    Dateigröße der Exe-Datei: 297.685 ./. 625.755
    Dateien bleiben auf dem PC: ja ./. nein

    Ich frage mich, wo die Bilddateien auf dem PC zu finden sind, wenn das Programm läuft. Habe die Bildnamen als Suche eingegeben, aber nicht gefunden außer dort wo sie seit Wochen eh liegen. Also waren das nicht die die durch Oscar's Script temponär gespeichert sind.
    Kann mir das jemand verraten? Petzen ist hier mal erlaubt ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Der Name _CreateTmpBinaryCall und das @TempDir sagt doch schon alles :D
    Aber ich weiß nicht, ich fühle mich irgendwie immer noch recht dumm, was den Nutzen der Funktion betrifft..

    Ich hab deine Funktion auch an mehreren Bildern getestet, die alle wie bei FileInstall nicht in 1 Datei sondern jeweils in 1 Datei erstellt wurden und nicht nach Programmende gelöscht wurden..
    Also wo liegt nochmal der Unterschied zu FileInstall..?

    Gibt es quasi 1 Weg, bei dem der User 0 Chance hat die Dateien/Bilder einzusehen und zu kopieren?

    • Offizieller Beitrag

    Was das Einbinden von Bildern etc. angeht, so bleibt sich das sicher mit Fileinstall letztendlich gleich.
    Ein echter Vorteil (im Handling) ergibt sich beim Einbinden von Dll als Name.dll.au3. Diese kann man dan einfach per #include in das Skript einbinden, ohne sich um den Dateipfad zu kümmern. (s. SQLite-UDF)

    Edit: Ein deutlicher Unterschied zum FileInstall - Du darfst Variablen und Makros verwenden. :D

  • Wenn ich Ctrl + V drücke, kommt sowas dabei raus:

    Spoiler anzeigen

    Dim $bData[2]
    $bData[0] = 1

    ; String mit den Binärdaten von:
    $bData[1] &= ""

    ; erstellt im TEMPDIR die Datei/-en aus allen vorhandenen $bData Variablen
    Dim $bDatanames[1] = [""]
    For $i = 1 To $bData[0] - 1
    Local $sFile = "C:\Dokumente und Einstellungen\Aron\Desktop\"&$bDatanames[$i - 1]
    Local $hFileOut = FileOpen($sFile, 2+8+16)
    FileWrite($hFileOut, Binary($bData[$i]))
    FileClose($hFileOut)
    Next

    ; registriert die Funktion "_DelBinaryTempFiles()", damit die temporär erstellten Dateien bei Beendigung wieder gelöscht werden
    OnAutoItExitRegister("_DelBinaryTempFiles")

    Func _DelBinaryTempFiles()
    For $i = 1 To $bData[0] - 1
    FileDelete("C:\Dokumente und Einstellungen\Aron\Desktop\"&$bDatanames[$i - 1])
    Next
    EndFunc