Probleme mit run

  • hallo,
    ich hab ein sehr einfaches problem, doch leider komme ich auf keinen grünen zweig.
    ich will mit der run funktion ein autoit-program starten

    PHP
    Run(@ScriptDir&"\Siedler Online\Nebenprogramme\Anzeige.exe")

    der programmpfad sollte stimmen und ich hab das script auch kompeliert.
    das einzige was mir einfällt, wo mein fehler liegen könnte, wäre das workingdir, doch leider weiß ich nicht was ich dort reinschreiben soll

    grüße
    ps.:ich hoffe diese Frage kam nicht schon all zu oft

    Einmal editiert, zuletzt von Urban (9. Januar 2012 um 23:08)

  • Workingdir müsste in dem Fall dann @ScriptDir&"\Siedler Online\Nebenprogramme" sein...

    Benutz aber lieber ShellExecute. Ist angenehmer.

  • stimmt sry habs leider nicht deutlich gesagt:)

    es tut sich einfach garnichts, das programm wird ohne was gemacht zu haben, oder ohne das ne fehlermeldung kommt beendet.


    Workingdir müsste in dem Fall dann @ScriptDir&"\Siedler Online\Nebenprogramme" sein...

    Benutz aber lieber ShellExecute. Ist angenehmer.

    hab ich schon gemacht funkt auch nicht.

  • Das liegt wahrscheinlich am Leerzeichen im Pfad. Versuchs mal mit dem:

    [autoit]

    Run('"' & @ScriptDir & '\Siedler Online\Nebenprogramme\Anzeige.exe"')

    [/autoit]


    Gruss Shadowigor

  • Ich würde erst einmal den Pfad zwischendurch ausgeben lassen um zu sehen ob er wirklich korrekt ist:

    [autoit]

    MsgBox(0,"",@ScriptDir&"\Siedler Online\Nebenprogramme\Anzeige.exe")

    [/autoit]


    Wenn er korrekt ist sollte der Aufruf auch mit Leerzeichen funktionieren wenn die "Anzeige.exe" keine Admin-Rechte benötigt.
    Wenn sie allerdings doch Admin-Rechte benötigt und das AutoIt-Skript selbst nicht als Admin aufgerufen wurde wird bei Run nichts passieren.
    Entweder du schreibst an den Anfang deines Skriptes noch:

    [autoit]

    #RequireAdmin

    [/autoit]


    Dann werden alle Programme die du mit dem Skript aufrufst immer mit Admin-Rechten gestartet - ohne weitere Nachfrage.
    Oder du rufst das Programm so auf:

    [autoit]

    ShellExecute(@ScriptDir&"\Siedler Online\Nebenprogramme\Anzeige.exe")

    [/autoit]


    Dann kommt die Admin-Abfrage bei jedem einzelnen Programmaufruf.

  • Das liegt wahrscheinlich am Leerzeichen im Pfad. Versuchs mal mit dem:

    [autoit]

    Run('"' & @ScriptDir & '\Siedler Online\Nebenprogramme\Anzeige.exe"')

    [/autoit]


    Gruss Shadowigor


    Hey thx so funktionierts!!
    jetzt würde ich nur gern verstehen warum.

    AspirinJunkie: wusste garnicht, dass man bei ShellExecute auch dateipfade angeben kann. ich dachte da müsste die exe immer im selben ordner sein wie das skript.

    was ist dann überhaupt der unterschied zwischen ShellExecute und Run?

  • was ist dann überhaupt der unterschied zwischen ShellExecute und Run?

    • Die zugrunde liegende API-Funktion. Bei Run: CreateProcess, bei ShellExecute: ShellExecute (oder auch ShellExecuteEx?)
    • Run ruft direkt nur PE-Dateien auf (exe, com...), Shellexecute schaut erst in der Registry nach welches Programm wie mit der Dateiendung verknüpft ist und ruft dann die Datei entsprechend auf.
    • Das Verhalten bei einen Aufruf von einem Admin-Programm aus einem Nicht-Admin-Skript: Run ignoriert es, ShellExecute bringt die manuelle Abfrage
    • Run gibt die ProcessID zurück, Shellexecute nur ob der Aufruf geklappt hat oder nicht.
    • Mit Run können die std-Streams umgelenkt werden (für Auslesen und schreiben bei Konsolenprogrammen)

    Einmal editiert, zuletzt von AspirinJunkie (18. Februar 2012 um 11:42)

  • thx für die erklärung, doch leider kann ich als programmier-neuling nicht viel damit anfangen.

    ich hab nur soviel verstanden das run die ProcessID zurrückgibt mit der ich dann nacher was anfangen kann.
    was der rest mir bringen soll, keine Ahnung.

    aber unabhängig davon.
    würdet ihr mir eher zu run oder zu shellexecute raten?

  • Und schon hab ich das nächste problem:
    die exe anzeige kann ich jetzt aufrufen. thx dafür nochmal.
    doch sie läuft nicht richtig ab.
    hier mal mein code:

    [autoit]

    $Wiederholungen=IniRead("SiedlerOnline","Handel","Wiederholungen","fehler")
    $Wiederholungen_Ges=IniRead("SiedlerOnline","Handel","Wiederholungen_Gesamt","fehler")
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Anzeige", 32, 15, 1, 730,$WS_POPUP,BitOR($WS_EX_TOPMOST,$WS_EX_TOOLWINDOW ))
    $Label1 = GUICtrlCreateLabel($Wiederholungen&"/"&$Wiederholungen_Ges, 1, 1, 30, 15,$SS_CENTER )
    GUICtrlSetColor($Label1,0xFFFFFFF)
    GUICtrlSetBkColor($Label1, 0x302D29)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Label1
    $Wiederholungen=IniRead("SiedlerOnline","Handel","Wiederholungen","fehler")
    $Wiederholungen_Ges=IniRead("SiedlerOnline","Handel","Wiederholungen_Gesamt","fehler")
    GUICtrlSetData($Label1,$Wiederholungen &"/"&$Wiederholungen_Ges)
    case $GUI_EVENT_SECONDARYUP
    Exit
    EndSwitch
    WEnd

    [/autoit]

    es soll folgendermaßen funktionieren:
    ich schreibe in meinem hauptprogramm die wiederholungen in eine ini datei. Das funktioniert auch.
    nun starte ich mit dem hauptprogramm die exe Anzeigen und diese liest die wiederholungen aus der ini-Datei und zeigt sie mir an.
    Das ganze funktioniert auch wenn ich manuel auf die exe klicke, doch wenn ich sie übers Hauptprogramm starte, kommt immer der default wert (in meinem Fall: fehler)
    ich hab schon versucht die exe einfach in nem kleinen program zu starten und es passiert das gleiche. obwohl die ini-Datei stimmt.

    ich weiß einfach nicht was da nicht stimmt.

    edit: hab jetzt die ini datei mal in den ordner vom hauptprogramm gemacht und dann funkts.
    aber warum geht das nicht wenn ich die ini datei in den ordner vom nebenprogramm (in der Anzeige.exe drin ist) mache?
    wie kann ich das machen damit er die ini datei aus dem ordner "nebenprogramme" nimmt?

    Einmal editiert, zuletzt von Urban (8. Januar 2012 um 15:14)

  • Also erstmal noch zu dem warum es mit meiner Variante funktioniert:
    Du hast in deinem Pfad ein Leerzeichen. Windows teilt deinen Pfad bei jedem Leerzeichen auf (wie bei StringSplit). Der erste daraus resultierende String ist dann der Programmpfad und die anderen sind die Parameter (die, welche man in $CmdLine findet). Also denkt Windows bei deinem Beispiel, dass @ScriptDir & "\Siedler" dein Programmpfad ist. Diese exe existiert aber natürlich nicht. Das ganze kann umgangen werden wenn du den Pfad mit Anführungszeichen umgibst.

    So und nun zu deinem Problem:
    Du musst bei IniRead den kompletten Pfad beim Dateinamen eingeben. Dann sollte es gehen.

    Gruss Shadowigor

  • seit wann werden hier skripte die gegen AGB von DSO verstoßen unterstützt

    Spoiler anzeigen
    Zitat

    Sie dürfen keine soft- oder hardwaregestützte Anwendung Dritter ausführen oder ausführen lassen oder einsetzen oder anwenden, die es Ihnen ermöglichen, den Spielstand oder den Spielverlauf zu beeinflussen oder Leistungen zu erhalten, die Sie sonst nur gebührenpflichtig im Verlauf des Spiels erwerben können. Ihnen ist es daher insbesondere untersagt, sich kostenpflichtige Zusatzfunktionen oder sonstige Vorteile, wie etwa die systematische oder automatische Steuerung des Spiels oder einzelner Spielfunktionen in Die Siedler Online, durch die Verwendung von Software Dritter oder sonstigen Anwendungen zu verschaffen (insbesondere sog. „Bots“, „Hacks“ oder „Cheats“).

    http://www.diesiedleronline.de/de/agb

  • In den hier gezeigten Codeausschnitten wird ja nichts verbotenes gemacht. Er zeigt ja nur etwas an und es ist ja nur verboten etwas zu beeinflussen.

  • Shadowigor
    Das sollte prinzipiell bei einem reinen exe-Aufruf durch Run eigentlich nicht passieren und nach dem ich diese Ordnerstruktur mal nachgebaut habe war dies bei mir auch nicht reproduzierbar.
    Egal ob Leerzeichen im Pfad oder nicht - die exe wird bei mir immer korrekt geöffnet.
    Kannst du das vielleicht auch mal bei dir testen?

    @Death
    Kenn mich hier jetzt nicht aus - aber bisher sah es für mich nicht so aus als ob das direkt auf das Programm "Siedler Online" zugegriffen wird.
    Ich konnte bisher nur rauslesen das er irgendeine Tabelle anzeigen will.

  • das mag sein :) indirekt versucht er aber sich einen Handels Bot zu basteln der automatisch handelsangebote einstellt, und wenn ablaufen erneut einstellt.(zumindest eine gui welche anzeigt wieviel male er schon eingestellt hat und wieoft er ingesamt einstellen soll)

    Alles nur spekulation, aber verdacht ist groß^^

  • AspirinJunkie
    Ich war mir ja auch nicht sicher aber anscheinend funktioniert es ja jetzt so. Das ist ja die Hauptsache.

    @Death
    Ja der verdacht ist gross. Aber mann muss ja nicht immer gleich das Schlimmste annehmen.

  • thx für die ganzen Antworten.. hat mir sehr geholfen!!

    nächstes mal werde ich wohl mein Code ein wenig verändern, damit keine falschen Schlüsse gezogen werden können.