Mein Tool läuft unter 2008 R2 x64 nicht

  • Hi!

    habe für Interne Software bei uns ein Tool geschrieben, welches Updates herunterladen und entpacken soll.
    Jedoch hängt es unter Windows 2008 R2 x64! Unter 2003 und 2003 x64 funktioniert es ohne Probleme.
    _FTP_FindFileFirst($ftpverbinden,'',$dateisuche)
    Es scheint an

    [autoit]

    _FTP_FindFileFirst($ftpverbinden,'',$dateisuche)

    [/autoit]

    zu liegen.
    Funktioniert das ganze nicht mehr unter 2008?
    Komme da irgendwie nicht weiter.

    btw: Falls es ein bischen unübersichtlich ist, tut es mir leid. Bin noch nicht lange in der Materie .

    MfG
    Daniel

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=*******.ico
    #AutoIt3Wrapper_Res_Fileversion=0.0.0.64
    #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.4.0
    Author: Daniel *******

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

    Script Function:
    Download der aktuellen Updates für die *******Programme

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

    #ce ----------------------------------------------------------------------------

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;Benötigte au3 Dateien ins Script binden

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

    #include <Array.au3>
    #Include <FTPEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

    ;Deklarieren der Variablen/Konstanten
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

    Global Const $server = '*******' ;FTP server
    Global Const $username = '*******' ; FTP Username
    Global Const $password = '*******' ; FTP Passwort
    Global Const $configinidatei = @ScriptDir & '\config.ini' ;Legt Pfad und Dateinamen für die Konfigurationsdatei fest
    Global Const $protokolldatei = @ScriptDir & '\Protokoll.log' ;Legt Pfad und Dateinamen für die Protokolldatei fest
    Global Const $programmanzahl = 9 ;Programmanzahl
    Global Const $dateianfang[$programmanzahl] = ['*******','*******','*******','*******','*******','*******','*******','*******','*******'] ; Dateianfänge der Updates bis zum Datum
    Global Const $dateipfad[$programmanzahl] = ['/*******/','/*******/','/*******/','/*******/','/*******/','/*******/','/*******/','/*******/','/*******/'] ;Pfade der Programme auf dem FTP Server
    Global $Checkbox[$programmanzahl]
    Global $Input[$programmanzahl]
    Global $Button[$programmanzahl]
    Global $check[$programmanzahl]
    Global $pfad[$programmanzahl]
    Global $updatedatum
    Global $Kundeneingabe
    Global $ftpsession
    Global $ftpverbinden
    Global $ftpsession2
    Global $ftpverbinden2

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;Konfigurationsmodus

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

    if $CmdLine[0] = 1 and $cmdline[1] = '/config' Then ;Wird ausgeführt wenn das Programm mit dem Parameter /config gestartet wird
    GUICreate('*******Updater', 569, 454, 193, 115)
    $Checkbox[0] = GUICtrlCreateCheckbox('**************', 16, 40, 97, 17)
    GUICtrlCreateLabel('Installierte Programme', 16, 8, 107, 17)
    $Input[0] = GUICtrlCreateInput('C:\DISK\UPDATE\*******', 128, 40, 329, 21)
    $Button[0] = GUICtrlCreateButton('Durchsuchen', 472, 40, 75, 25, 0)
    GUICtrlCreateLabel('Zielpfad', 128, 8, 42, 17)
    $Checkbox[1] = GUICtrlCreateCheckbox('*********************', 16, 72, 97, 17)
    $Input[1] = GUICtrlCreateInput('C:\DISK\UPDATE\*******', 128, 72, 329, 21)
    $Button[1] = GUICtrlCreateButton('Durchsuchen', 472, 72, 75, 25, 0)
    $Checkbox[2] = GUICtrlCreateCheckbox('Terminplaner', 16, 104, 97, 17)
    $Input[2] = GUICtrlCreateInput('C:\DISK\UPDATE\Terminplaner', 128, 104, 329, 21)
    $Button[2] = GUICtrlCreateButton('Durchsuchen', 472, 104, 75, 25, 0)
    $Checkbox[3] = GUICtrlCreateCheckbox('*******', 16, 136, 97, 17)
    $Input[3] = GUICtrlCreateInput('C:\DISK\UPDATE\*******', 128, 136, 329, 21)
    $Button[3] = GUICtrlCreateButton('Durchsuchen', 472, 136, 75, 25, 0)
    $Checkbox[4] = GUICtrlCreateCheckbox('*******', 16, 168, 97, 17)
    $Input[4] = GUICtrlCreateInput('C:\DISK\UPDATE\*******', 128, 168, 329, 21)
    $Button[4] = GUICtrlCreateButton('Durchsuchen', 472, 168, 75, 25, 0)
    $Checkbox[5] = GUICtrlCreateCheckbox('Fibu', 16, 200, 97, 17)
    $Input[5] = GUICtrlCreateInput('C:\DISK\UPDATE\Fibu', 128, 200, 329, 21)
    $Button[5] = GUICtrlCreateButton('Durchsuchen', 472, 200, 75, 25, 0)
    $Checkbox[6] = GUICtrlCreateCheckbox('Lohn', 16, 232, 97, 17)
    $Input[6] = GUICtrlCreateInput('C:\DISK\UPDATE\Lohn', 128, 232, 329, 21)
    $Button[6] = GUICtrlCreateButton('Durchsuchen', 472, 232, 75, 25, 0)
    $Checkbox[7] = GUICtrlCreateCheckbox('*******', 16, 262, 97, 17)
    $Input[7] = GUICtrlCreateInput('C:\DISK\UPDATE\*******', 128, 262, 329, 21)
    $Button[7] = GUICtrlCreateButton('Durchsuchen', 472, 262, 75, 25, 0)
    $Checkbox[8] = GUICtrlCreateCheckbox('*******', 16, 292, 97, 17)
    $Input[8] = GUICtrlCreateInput('C:\DISK\UPDATE\*******', 128, 292, 329, 21)
    $Button[8] = GUICtrlCreateButton('Durchsuchen', 472, 292, 75, 25, 0)
    $Label1 = GUICtrlCreateLabel('Kundenname', 16, 322, 80, 17)
    $Kundeneingabe = GUICtrlCreateInput('Kundenname', 128, 322, 329, 21)
    $Sichern = GUICtrlCreateButton('Konfiguration sichern', 16, 416, 115, 25, 0)
    $Beenden = GUICtrlCreateButton('Beenden', 472, 416, 75, 25, 0)
    GUISetState(@SW_SHOW)

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

    _iniread(1)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Beenden
    Exit
    Case $Sichern
    _iniwrite()
    _iniwritekundenname()
    Case $Button[0]
    _durchsuchen($input[0])
    Case $Button[1]
    _durchsuchen($input[1])
    Case $Button[2]
    _durchsuchen($input[2])
    Case $Button[3]
    _durchsuchen($input[3])
    Case $Button[4]
    _durchsuchen($input[4])
    Case $Button[5]
    _durchsuchen($input[5])
    Case $Button[6]
    _durchsuchen($input[6])
    Case $Button[7]
    _durchsuchen($input[7])
    Case $Button[8]
    _durchsuchen($input[8])
    EndSwitch
    WEnd

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;Downloadmodus

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

    Elseif $CmdLine[0] = 0 Then ;Wird ausgeführt, wenn es keine Parameter gibt
    $programmcount = 0

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

    While $programmcount < $programmanzahl ; Durchläuft die Schleife einmal für jedes Programm
    _iniread(4)
    If $check[$programmcount] = 1 Then
    $ftpsession = _FTP_Open('*******') ;Startet die FTP Session
    $ftpverbinden = _FTP_Connect($ftpsession, $server, $username, $password) ; Verbindet sich mit dem FTP Server
    if @error then
    _FileWriteLog($protokolldatei,'ERROR: Überprüfen Sie Ihre Internetverbindung und Ihre FTP-Zugangsdaten!',1)
    _FileWriteLog($protokolldatei,'ERROR: Verbindung zum FTP-Server konnte nicht hergestellt werden.',1)
    exit
    EndIf
    _ftpunterordner($dateipfad[$programmcount])

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;Aktuelle Updatedatei finden

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

    Global $dateisuche[11]
    Global $dateiname[1] = [$dateisuche]
    Global $dateiname2[1] = [$dateisuche]
    Global $stop=0
    Global $count=0
    Local $i=1
    Global $aktuellstesupdate = 1
    Global $datanfang = $dateianfang[$programmcount]
    Global $datpfad = $dateipfad[$programmcount]

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

    $dateisuche4 = _FTP_FindFileFirst($ftpverbinden,'',$dateisuche)
    if Not @error Then
    If StringTrimRight($dateisuche4[10],12) = $datanfang And StringTrimLeft($dateisuche4[10],StringLen($datanfang)+8) = '.exe' Then ; Es wird nach Dateianfang und *.exe gefiltert
    $updatedatum = StringTrimRight($dateisuche4[10],4) ; Datum wird aus dem Dateinamen gefiltert
    $updatedatum = StringTrimLeft($updatedatum,StringLen($datanfang))
    if $aktuellstesupdate < $updatedatum Then ;Aktuelleste Version wird gesucht
    $aktuellstesupdate = $updatedatum
    EndIf
    EndIf
    EndIf

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

    While $stop = 0
    $dateisuche2 = _FTP_FindFileNext($dateisuche)
    if @error Then
    ExitLoop
    Else
    If StringTrimRight($dateisuche2[10],12) = $datanfang And StringTrimLeft($dateisuche2[10],StringLen($datanfang)+8) = '.exe' Then ; Es wird nach Dateianfang und *.exe gefiltert
    $updatedatum = StringTrimRight($dateisuche2[10],4) ; Datum wird aus dem Dateinamen gefiltert
    $updatedatum = StringTrimLeft($updatedatum,StringLen($datanfang))
    if $aktuellstesupdate < $updatedatum Then ;Aktuelleste Version wird gesucht
    $aktuellstesupdate = $updatedatum
    EndIf
    EndIf
    EndIf
    WEnd
    _FTP_FindFileClose($dateisuche)
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;Vergleich mit der aktuellen Datei und Download der Datei
    If Not FileExists ($pfad[$programmcount]) Then
    DirCreate($pfad[$programmcount])
    EndIf

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

    Global $lokaledatei = $pfad[$programmcount] & '\' & $datanfang & $aktuellstesupdate & '.exe'
    if FileExists($lokaledatei) Then

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

    If _FTP_FileGetSize($ftpverbinden, $datanfang & $aktuellstesupdate & '.exe') = FileGetSize($lokaledatei) Then
    Else
    _downloadandextract()
    EndIf
    Else
    _downloadandextract()
    Endif

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

    EndIf
    $programmcount = $programmcount +1
    _FTP_Close($ftpsession) ; schließt die FTP Session
    WEnd ;~~ENDE~~ Durchläuft die Schleife einmal für jedes Programm

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

    EndIf
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;FUNKTIONEN

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

    Func _durchsuchen($input) ;Ruft einen Durchsuchen Dialog auf und kopiert den ausgewählten Pfad in ein Eingabefeld
    Local $choosefolder = FileSelectFolder('Zielordner: ','',1)
    If Not $choosefolder = '' Then
    GUICtrlSetData($Input,$choosefolder)
    Endif
    EndFunc ; ~~Ende~~ _durchsuchen

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

    Func _ftpunterordner($unterordner) ;wechselt den Ordner auf dem FTP und schreibt ein Errorlog, falls dieser nicht vorhanden ist
    _FTP_DirSetCurrent($ftpverbinden,$unterordner)
    If @error then
    _FileWriteLog($protokolldatei,'ERROR: Der Ordner ' & $unterordner & ' konnte nicht gefunden werden!',1)
    EndIf
    EndFunc ; ~~Ende~~ _ftpunterordner

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

    Func _iniread($set) ;Liest Daten aus der Ini und übernimmt diese im Programm
    If FileExists($configinidatei) Then ;Überprüft, ob die config.ini vorhanden ist
    $programmcount2 = 0
    While $programmcount2 < $programmanzahl
    ;Pfade
    Local $section = $dateipfad[$programmcount2]
    Local $readini = IniRead($configinidatei,$section,'Pfad','')
    $pfad[$programmcount2] = $readini
    ;Checkboxen
    $check[$programmcount2] = IniRead($configinidatei,$section,'Installationsstatus','')
    If $set = 1 Then ; Einstellungen aus der Ini werden übernommen
    ;Pfade
    GUICtrlSetData($Input[$programmcount2],$pfad[$programmcount2])
    ;Checkboxen
    $checkaktuell = IniRead($configinidatei,$section,'Installationsstatus','')
    GUICtrlSetState($Checkbox[$programmcount2],$checkaktuell)
    EndIf ; ~~Ende~~ Einstellungen aus der Ini werden übernommen
    $programmcount2 = $programmcount2 + 1
    WEnd
    $kunderead = IniRead(@ScriptDir & '/config.ini','Kunde','Kundenname','Kundenname')
    GUICtrlSetData($Kundeneingabe,$kunderead)
    EndIf ; ~~Ende~~ Überprüft, ob die config.ini vorhanden ist
    EndFunc; ~~Ende~~ _iniread

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

    Func _iniwrite() ;Schreibt die neuen Daten in die Ini
    $programmcount2 = 0
    While $programmcount2 < $programmanzahl
    ;Pfade
    Local $guiread = GUICtrlRead($Input[$programmcount2])
    $pfad[$programmcount2] = $guiread
    IniWrite($configinidatei,$dateipfad[$programmcount2],'Pfad',$pfad[$programmcount2])
    ;Checkboxen
    $guiread = GUICtrlRead($Checkbox[$programmcount2])
    $check[$programmcount2] = $guiread
    IniWrite($configinidatei,$dateipfad[$programmcount2],'Installationsstatus',$check[$programmcount2])
    $programmcount2 = $programmcount2 + 1
    WEnd
    EndFunc ; ~~Ende~~ _iniwritepfade()

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Func _iniwritekundenname() ;Schreibt die neuen Daten in die Ini
    $ftpsession2 = _FTP_Open('*******r_FTP_write') ;Startet die FTP Session
    $ftpverbinden2 = _FTP_Connect($ftpsession2, $server, $username, $password) ; Verbindet sich mit dem FTP Server
    if @error then
    _FileWriteLog($protokolldatei,'ERROR: Überprüfen Sie Ihre Internetverbindung und Ihre FTP-Zugangsdaten!',1)
    _FileWriteLog($protokolldatei,'ERROR: Verbindung zum FTP-Server konnte nicht hergestellt werden.',1)
    exit
    EndIf
    _FTP_FileGet($ftpverbinden2,'/serverhostingupdates/Updates.ini',@ScriptDir & '/Updates.ini')
    IniWriteSection(@ScriptDir & '/Updates.ini',GUICtrlRead($Kundeneingabe),'')
    IniWrite(@ScriptDir & '/config.ini','Kunde','Kundenname',GUICtrlRead($Kundeneingabe))
    _FTP_FilePut($ftpverbinden2,@ScriptDir & '/Updates.ini','/serverhostingupdates/Updates.ini')
    _FTP_Close($ftpsession2)
    Sleep(2000)
    FileDelete(@ScriptDir & '/Updates.ini')
    MsgBox(64,'Information','Konfiguration gesichert')

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

    EndFunc ; ~~Ende~~ _iniwritepfade()

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

    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

    Func _downloadandextract()
    DirRemove($pfad[$programmcount],1)
    DirCreate($pfad[$programmcount])
    _FTP_FileGet($ftpverbinden,$datanfang & $aktuellstesupdate & '.exe',$lokaledatei)
    if @error Then
    _FileWriteLog($protokolldatei, 'ERROR: Download der Datei ' & $datanfang & $aktuellstesupdate & '.exe' & ' ist fehlgeschlagen.' ,1)
    Else
    _FileWriteLog($protokolldatei, 'Download der Datei ' & $datanfang & $aktuellstesupdate & '.exe' & ' war erfolgreich.' ,1)
    EndIf

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

    ;EXTRACT

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

    Run(@ScriptDir & '\7za.exe x "' & $lokaledatei & '" -o"' & $pfad[$programmcount] & '\entpackt"')
    EndFunc
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    [/autoit]

    21 is only half the truth.

    2 Mal editiert, zuletzt von Mahagon (9. Februar 2010 um 20:04)