Programm welches über CMD funktioniert, funktioniert nicht über AutoIt

  • Hi,
    Ich habe ein kleines Programm um MagicPackets für Wake on Lan zu versenden. Dieses kann man auch über die Konsole nutzen, habs deshalb direkt in System32 gepackt um es ohne Pfad und .exe aufrufen zu können.
    Das ganze funktioniert auch per CMD.
    Wenn ich also

    Code
    rw /m:[MAC Adresse des PCs]

    in CMD eingebe oder einfach im Ausführen-Fenster funktioniert es einwandfrei.

    Da ich das ganze mit einem kleinen Skript verbinden wollte, wollte ich das Programm auch über das Skript starten.
    Aber hier tut sich nichts.
    Weder so:

    [autoit]

    Run("rw /m:[MAC Adresse des PCs]")

    [/autoit]


    noch so:

    [autoit]

    Run(@ComSpec & " /c " & "rw /m:[MAC Adresse des PCs]")

    [/autoit]

    Hat jemand ne Ahnung woran das liegen kann?
    Hab das Skript auch schon als Administrator ausgeführt - auch kein Erfolg

    ?(

  • versteh ich das richtig, du willst via autoit per console n packed verschiecken?
    wen das so ist muss du doch erst die console ansteuern oder?

    wen das so ist, dan versuchs mal so ^^ auf die einfachste art :D

    Spoiler anzeigen
    [autoit]

    Run("CMD.exe")
    Sleep(3000)
    Send("rw /m:[MAC Adresse des PCs]")
    Send("{ENTER}")

    [/autoit]
  • Das versuchte ich ja per @Comspec
    Aber wenn ich es einfach bei Ausführen eingebe funktioniert es, da sollte es doch auch mit Run klappen.

    Einmal editiert, zuletzt von das Keks (31. Juli 2010 um 16:57)

  • Das versuchte ich ja per @Comspec
    Aber auch wenn ich es einfach bei Ausführen eingebe funktioniert es, da sollte es doch auch mit Run klappen.

    Funktioniertes wenn du den Pfad mit angibst?

    [autoit]

    Run("C:\Windows\system32\rw /m:[MAC Adresse des PCs]")

    [/autoit]
  • Ne, hatte ich auch schon versucht. :(
    Ich versuche mal eben das workingdir aus System32 zu setzten, ist normal ja da wo das Skript liegt.

  • naja das gesamte, du sagst dochm, das ganze funkt über CMD.... wiso baust du dan das ned so, das dein script halt cmd öffnet und es dan dort reinhaust

    wie ich oben editiert hab, versuch das einmal

    [autoit]


    Run("CMD.exe")
    Sleep(3000)
    Send("rw /m:[MAC Adresse des PCs]")
    Send("{ENTER}")

    [/autoit]

    fallses nicht funkt, kapier ich deine frage immernoch ned xD

  • Hi,
    wenn die Pfade alle richtig angegeben sind (Leerzeichen beachten! ) funktioniert RUN einwandfrei auch mit Konsolenprogrammen.

    Ansonsten noch die AutoIt-Lösung für das Aufwecken eines Rechners per MagicPacket

    Spoiler anzeigen
    [autoit]

    $IPAddress = "192.168.1.255"; This is the broadcast address !

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

    $MACAddress = "001d92ed72f4" ;MAC

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

    UDPStartUp()

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

    $connexion = UDPOpen($IPAddress, 7)
    $res = UDPSend($connexion, GenerateMagicPacket($MACAddress))
    if $res=102 Then
    MsgBox(0, "Rechner wurde gestartet", $res)
    Else
    MsgBox(0, "Rechner konnte nicht gestartet werden!", $res)
    endif
    UDPCloseSocket($connexion)
    UDPShutdown()

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

    ; ===================================================================
    ; Functions
    ; ===================================================================

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

    ; This function convert a MAC Address Byte (e.g. "1f") to a char
    Func HexToChar($strHex)

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

    Return Chr(Dec($strHex))

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

    EndFunc

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

    ; This function generate the "Magic Packet"
    Func GenerateMagicPacket($strMACAddress)
    $MagicPacket = ""
    $MACData = ""

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

    For $p = 1 To 11 Step 2
    $MACData = $MACData & HexToChar(StringMid($strMACAddress, $p, 2))
    Next

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

    For $p = 1 To 6
    $MagicPacket = HexToChar("ff") & $MagicPacket
    Next

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

    For $p = 1 To 16
    $MagicPacket = $MagicPacket & $MACData
    Next

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

    Return $MagicPacket

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

    EndFunc

    [/autoit]
  • UDPOpen kann mittlerweile auch den netzweiten Broadcast ;)

    [autoit]

    UDPStartUp()
    $connexion = UDPOpen("255.255.255.255", 9, 1)
    ...
    UDPCloseSocket($connexion)
    UDPShutdown()

    [/autoit]