Probleme mit Filecopy und Fileexist unter Windows 7 64 bit

  • Hallo,

    ich habe mit Filecopy und Fileexist unter Windows 7 64 bit probleme.
    Manche Dateien werden nicht gefunden und können dadurch auch nicht kopiert werden.
    Die Datein liegen in "C:\Windows\System32\drivers", "C:\Windows\System32"
    Die Dateien kann ich im Explorer sehen und auch mit der Hand umkopieren.

    Spoiler anzeigen
    Code
    #RequireAdmin
    IF FILEEXISTS("C:\Windows\System32\drivers\nvlddmkm.sys") = 1 THEN
    	$FILEFOUND = 1
    Else
    	$FILEFOUND = 0
    ENDIF  
    	MsgBox(4096, "",$FILEFOUND)

    Das System ist Windows 7 64 bit.
    Habe dies auch unter Administrator versucht kein erfolg.

    Kann mir dabei jemand helfen?
    Gruß MadMax

    Einmal editiert, zuletzt von MadMax (15. August 2011 um 20:41)

  • Also ich habe auch Windows 7 x64 und bei mir läuft alles einwandfrei?
    kommt denn irgend ein Fehler , Error?

    Gruß Marvin

  • Nein eine Fehlermeldung bekomme ich nicht.
    Die Windowsversion ist eine Home Premium.

    Wenn ich prüfen lasse ob die Datei vorhanden ist, wird sie nur als Nicht gefunden gemeldet mit dem Script.


    Gruß

  • Hallo,

    habe jetzt noch an einem anderen PC mit Windows 7 Home Premium 64bit Service Pack 1 probiert
    selbes Ergebnis, Datei nicht gefunden.
    Ich benutze AutoIT 3.3.6.1

    Welche möglichkeit gibt es noch wo Ich testen kann.

    Gruß

  • Dann läuft dein Programm nicht als x64 sondern als x86-Programm?

    Wenn ja - dann so:

    [autoit]

    ; Umleitung für x86-Programm abschalten:
    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)

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

    If FileExists(@WindowsDir & "\System32\drivers\nvlddmkm.sys") Then
    $FILEFOUND = 1
    Else
    $FILEFOUND = 0
    EndIf
    MsgBox(4096, "", $FILEFOUND)

    [/autoit]

    2 Mal editiert, zuletzt von AspirinJunkie (15. August 2011 um 20:17)

  • setze am Anfang deines Scriptes folgende Zeile...

    [autoit]

    #AutoIt3Wrapper_UseX64=y

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Naja indirekt.
    Wenn du es mit der Abschaltung machst wie in meinem Beispiel, wird prinzipiell auf die x64-Ordner verwiesen.
    Dann klappt es bei beiden.
    Allerdings - und da bin ich mir ausdrücklich nicht sicher - verweisen die AutoIt-Makros dann auch weiterhin auf die x64-Ordner.
    Brauchst du nun mal x86-Ordner müsstest du das im Skript dann wieder ändern.
    Kommt halt drauf an welche Ordner du benötigst.

  • nicht auf die Einfache da die Anweisung eine Präprozessor Anweisung ist und nicht zur Laufzeit verändert werden kann.
    Da müsstest Du Dir je ein 32-bit und ein 64-bit Mini Exe-Prog machen nur für die Abfrage.
    Zumindest fällt mir keine bessere Lösung ein.

    Ich denke AspirinJunkies Antwort hilft Dir eher ...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Ich Danke euch beiden mal.

    Jetzt wo ich wo ich ansetzten muss fine ich vielleicht eine Lösung für mein Problem,
    Wenn Ich hin bekommen das es auf x86 sowie x64 funktioniert melde ich es hier.
    Falls ich nicht hinbekomme kann ich ja immer noch zwei Versionen machen
    eine für x86 und eine für x64.

    Gruß MadMax

  • Bei mir gehts aber auch so:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    IF FILEEXISTS("C:\Windows\System32\drivers\nvlddmkm.sys") THEN
    $FILEFOUND = 1
    Else
    $FILEFOUND = 0
    ENDIF
    MsgBox(4096, "",$FILEFOUND)

    [/autoit]
  • Hallo,
    Ich habe es jetzt so gelöst:

    [autoit]

    $PROCESSOR = REGREAD("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment", "PROCESSOR_ARCHITECTURE")
    If $PROCESSOR = "AMD64" Then
    DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)
    Endif

    [/autoit]

    Gruß MadMax

  • Vorsichtig - gibt der Registry-Eintrag die Prozessorarchitektur an (entspricht dem Makro @CPUArch bei AutoIt) oder die des Betriebssystems (@OSArch bei AutoIt)?
    Denn es kann ja durchaus sein das ein AMD64-Prozessor mit einem x86-Betriebssystem läuft - dann wäre deine Abfrage fehlerhaft.
    Überhaupt: Einfacher und sicherer sollte es sein wenn du, anstatt die Registry auszulesen, einfach die entsprechenden AutoIt-Makros @OSArch und @AutoItX64 verwendest (siehe AutoIt-Hilfe).