Problem mit Winexec und keine Lösung gefunden!



  • Hallo liebe Forums-Nutzer,
    Ich bin ein totaler anfänger in C++ doch habe ich versucht mich best möglichst damit auseinander zu setzten!
    Kommen wir zum Problem:

    Ich wollte grundsätzlich eine Art programm starter schreiben, welcher externe programm startet.
    Soweit so gut, ich habe lange gesucht bis es mir endlich gelungen ist beim kompilieren keinen Fehler zu erhalten, nun funktioniert es soweit, nur wenn ich das Programm über das c++ prog starten will, tut sich nichts.

    Quelldatei:

    WinExec("[C:\\Test.exe",SW_SHOW);

    Gruß Masus



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • WinExec("**[**C:\\Test.exe",SW_SHOW);

    was mir mal als erstes auffällt ist die eckige klammer in der zeichenfolge für den pfad. ist das ein tipfehler hier in der post oder hast du die auch so in deinem prog. stehn.

    ansonsten bist du sicher das die test.exe auch auf c:\\ liegt?



  • Nein sie ist kein Tippfehler, habe es eins zu eins aus meinem Prog kopiert!

    Ja, liegt die exe, es liegt auch nicht daran das es eine verknüpfung ist, da ich es auch mit einer nicht verknüfung aus probiert habe..

    Masus



  • Edit(weiß nicht wie es hier im Forum geht):

    Es hat nun geklappt, ich weiß nicht wieso und so weiter, habe aber diesmal die eckige Klammer weggelassen und sofort das Prog ausführen lassen und es hat sofort funktioniert!

    Gruß Masus 😉



  • dann würde ich die klammer [ da mal rausmachen. könnte wunder bewirken 😉



  • wie kommst du auch darauf das dort ne eckige klammer hingehört. klammern haben generell am anfang nix in ner pfadangabe zu suchen.



  • Und ich würde mir mal Shellexecute, ShellexecuteEx und CreateProcess angucken, da WinExec nur noch wegen der Kompatibilität zu 16-Bit Programmen existiert.



  • Ok, danke für die vielen Antworten!
    Die eckige Klammer war bei jeder Quelle, die ich in anderen Foren gefunden habe dabei, weiß nicht wieso!

    Aber nun habe ich auch schon wieder ein neues Problem!

    Also ich wollte nun eine Datei, welche informationen zu dem ausgeführten Programm enthält, über den Starter bearbeiten können, dazu habe ich meinen Informatik lehrer gefragt, aber da dieser etwas verpeilt ist, hat er mir etwas anscheinend fehlerhaftes gegeben!
    Hier der QuellText:

    if (eingabe3==1){
    fstream datei;
    string inhalt = "Der Inhalt für die Info-Datei!";

    datei.open("Info.txt", ios::out);

    for(int i = 0; i < inhalt.lenght(); i++)
    {
    datei.write((char*)&inhalt[i], sizeof(char));
    }

    datei.close();
    }

    Grüße Masus



  • Achja, die Fehlermeldung vergessen:

    'struct std::string' has no member named 'lenght'



  • Masus schrieb:

    Achja, die Fehlermeldung vergessen:

    'struct std::string' has no member named 'lenght'

    #include <string>



  • ich bezweifel das in anderen foren eine eckige klammer in der pfadangabe war.
    und naja englisch sollte man können. 😉

    length nicht ht sondern th.

    und warum schreibst du buchstabenweise in die datei?

    [EDIT]
    @theta
    hätte er die string.h nicht inkludiert, würde die fehlermeldung anderst lauten;-)

    @Masus
    ich denke nicht das dein Info. lehrer verpeilt ist, eher bist du es.... 🙄

    [und noch ein Edit]
    mit

    i < inhalt.lenght();
    

    verlierst du den letzten karakter in deiner zeichenfolge. richtig wäre

    i <= inhalt.lenght();
    


  • @LowFly:
    Nix da string.h - nur string - die Header in C++ sind ohne Endung!.



  • LowFly schrieb:

    [und noch ein Edit]
    mit

    i < inhalt.lenght();
    

    verlierst du den letzten karakter in deiner zeichenfolge. richtig wäre

    i <= inhalt.lenght();
    

    Nein, Kleiner ist an der Stelle schon richtig - Arrays in C und C++ sind null-basiert, d.h. das letzte Element ist bei Index "Länge-1".



  • @CStoll
    aber die länge einer zeichenfolge (ich weis das dies eine array ist) wird mir doch immer ohne die null terminierung zurück gegeben. siehe strlen()!

    oder hab ich da bisher was verpasst?



  • LowFly schrieb:

    @CStoll
    aber die länge einer zeichenfolge (ich weis das dies eine array ist) wird mir doch immer ohne die null terminierung zurück gegeben. siehe strlen()!

    oder hab ich da bisher was verpasst?

    Ja, size() bzw. length() gibt die Anzahl Zeichen ohne Null- Terminierung zurück. In einem std::string ist aber

    std::string s;
    char c = s[s.size()];
    

    nicht definiert. Es gibt ganz einfach keine Null- Terminierung.

    Nur bei der Member- Funktion c_str() ist ein Null-Terminierter C-String garantiert.



  • Also, da ich bisher nichts verstanden habe, wovon alle gesprochen haben, ausser das ich mich total doof verschrieben habe!
    Nun habe ich den blöden Tippfehler entfernt und es läuft, er ruft die entsprechende Datei nur eben nicht auf um sie zu ändern, Tipps?

    Quelldatei:
    fstream datei;
    string inhalt = "Der Inhalt für die Info-Datei!";

    datei.open("Info.txt", ios::out);

    for(int i = 0; i < inhalt.length(); i++)
    {
    datei.write((char*)&inhalt[i], sizeof(char));
    }

    datei.close();
    }



  • fstream::open verlangt nach einer pfadangabe.

    wenn du schreibst

    datei.open("Info.txt", ...);
    

    MUSS die datei Info.txt im selben ordner liegen aus dem dein prog. gestartet wird.
    wenn das nicht der fall ist, findet fstearm deine datei nicht. wenn deine datei die du öffnen willst in einem anderen ordner bzw. laufwerk liegt, must du die pfadangabe anpassen.



  • Ok,
    habe nun nun einen Dateipfad angegeben, doch wenn ich nun die entsprechende Funktion ausführen will, tut sich nichts..

    Was muss ich noch ändern?

    [/cpp]fstream datei;
    string inhalt = "Der Inhalt für die Info-Datei!";

    datei.open("C:\\Users\\Max Hütten\\Desktop\\Minecraft\.minecraft\\Info.txt", ios::out);

    for(int i = 0; i < inhalt.length(); i++)
    {
    datei.write((char*)&inhalt[i], sizeof(char));
    }

    datei.close();
    }



  • lies dir das mal bitte durch...
    http://msdn.microsoft.com/en-us/library/aa651613



  • Gar keine Ahnung was du mir damit sagen willst!

    Wie schon gesagt:

    <----Keine Ahnung!!!


Anmelden zum Antworten