Problem mit Winexec!!



  • Hallo alle zusammen!!
    Ich hoffe ihr könnt mir weiterhelfen! Und zwar soll ein schon vorhandenes Prog(16 Bit Anwendung) mit Klick aufn Button mit Hilfe von WinExec ausgeführt werden.

    Das Prog wird aufgerufen aber nicht ausgeführt, wie es bei normalem Doppelklick mit der Maus tut!!

    Versteh nicht woran es liegt???



  • VladdyVlad schrieb:

    Das Prog wird aufgerufen aber nicht ausgeführt, wie es bei normalem Doppelklick mit der Maus tut!!

    ???

    Das musst du mir bitte näher erklären.



  • Hey..
    ok, habe also da eine .exe Datei, die ein paar Werte über die COM Schnittstelle verschickt. Beim doppelklicken mit der Maus, öffnet sich das Fenster kurz und man kann noch schnell die Zahlen sehen, die verschickt werden.

    Wenn ich aber Visual C++ benutze und über ein Button mit Hilfe der Funktion WinExec das Prog ausführe, öffnet sich auch kurz das Fenster, aber die Werte stehen nicht drin und werden auch nicht gesendet..das hab habe ich auch schon kontrolliert..

    Irgendiwe wird das Prog nicht vollständig ausgeführt??!!!



  • Also ein

    WinExec("C:\\test.exe",SW_SHOW)
    

    sollte funktionieren. Wie rufst du dein 16-Bit-Programm denn auf?

    EDIT: Upps, habe deinen letzten Post zu spät gesehen. Ich glaube, ich kann dir leider nicht weiterhelfen. 16-Bit-Programme kann ich hier sowieso nicht ausführen (XP x64), und in welche Richtung dein Problem genau geht, weiß ich leider nicht.



  • Hast du die 16-Bit-Anwendung denn im Quellcode vorliegen? Dann könntest du ja ein bisschen debuggen und den Fehler vielleicht eher lokalisieren.



  • Einen hab' ich noch:

    Du darfst im Pfad, den du WinExec übergibst, keine Leerzeichen haben. Dieser Aufruf etwa

    WinExec("C:\\Program Files\\test\\test.exe",SW_SHOW);
    

    würde versuchen, ein Programm namens "Program.exe" zu starten. Die Lösung wäre, den Programm-Namen im String in Anführungszeichen (\") zu setzen. Also so:

    WinExec("\"C:\\Program Files\\test\\test.exe\"",SW_SHOW);
    


  • Und noch einen:

    Muss deine 16-Bit-Anwendung in einem bestimmten Verzeichnis gestartet werden, beispielsweise weil sie dort Dateien öffnet o.ä.? Dann musst du das Ausführungsverzeichnis mit SetCurrentDirectory setzen.

    Problem hoffentlich gelöst?



  • Hey,
    hmm.. also meine Angabe sieht so aus:
    WinExec("C:\\BORLAND\\XONXOFF\\T.exe, SW_SHOW);

    Und der Quellcode ist nur mit Borland 3.1 compilierbar. Also bischen verzwickt das ganze...Ja genau, die Anwendung muss in einme bestimmten Verzeichnis gestartet werden, weil da auf Dateien zugegriffen werden...

    Hasz du ein Beispiel parat für das Ausführungsverzeichnis SetCurrentDirectory



  • Na ja, ein Beispiel habe ich nicht, da ich die Funktion selbst nie benutzt habe (glaube ich zumindest). Aber ich schätze, etwas in der Richtung

    SetCurrentDirectory("C:\\BORLAND\\XONXOFF");
    

    sollte funktionieren.



  • VladdyVlad schrieb:

    WinExec("C:\\BORLAND\\XONXOFF\\T.exe, SW_SHOW);

    Und das fehlende Anführungszeichen war sicher nur ein Tippfehler und steht so nicht im Quellcode, oder?



  • Nehmt lieber CreateProcess. Dem kann man das Ausführungsverzeichnis als Parameter mitgeben ohne irgendetwas "verstellen" zu müssen.



  • Hey,
    ja war ein Tippfehler!!!
    ok, schau mir das mal bei der MSDN-Libary an!


Anmelden zum Antworten