Blutiger Anfänger:Externe programme starten



  • Hallo

    Gibt es eine möglichkeit mit VC++ ein externes programm zu starten? Ich erstelle zum Beispiel ein Dialogfenster mit einem Button. Wenn mann diesen anklickt sill z.B. der IE starten oder die Befehlskonsole!

    Wie heisst der Befehl? Kennt ihr Seiten auf denen die wichtigsten befehle aufgelistet sind um System prozesse einzubinden? Programme starten, Systeminfos auslesen,etc.

    Danke in **Voraus!!!

    Dragi**



  • Das einfachste : WinExec -> schau mal in der Hilfe des Compilers nach (bzw. MSDN)



  • WinExec nicht mehr benutzen! Steht auch in der Hilfe!



  • Wenn dann nenn doch auch mal den Grund 🤡

    Grad mal nachgeschaut:

    Security Remarks
    The executable name is treated as the first white space-delimited string in lpCmdLine. If the executable or path name has a space in it, there is a risk that a different executable could be run because of the way the function parses spaces. The following example is dangerous because the function will attempt to run "Program.exe", if it exists, instead of "MyApp.exe".

    WinExec("C:\Program Files\MyApp", ...)
    If a malicious user were to create an application called "Program.exe" on a system, any program that incorrectly calls WinExec using the Program Files directory will run this application instead of the intended application.

    To avoid this problem, use CreateProcess rather than WinExec. However, if you must use WinExec for legacy reasons, make sure the application name is enclosed in quotation marks as shown in the example below.

    WinExec("\"C:\Program Files\MyApp.exe\" -L -S", ...)



  • Hi,

    mach es z.B. so:

    WinExec("C:\\ordner1\\deinprog.exe", SW_SHOW);

    Wichtig ist halt "\" zu verwenden weil "\" geht nicht.
    Wenn du etwas z.B. mit += verkettest, dann führ es so aus:

    WinExec(LPCSTR(strNetCmd),SW_SHOW);

    In strNetCmd ist dann der auszuführende Befehl.

    Chris



  • Vielen Dank!!!

    Is ja genial einfach, fast wie Visual basic 🙂 Das nutzt nen Kollege, aber ich find das nicht so professionell!

    Danke für die schnelle Hilfe



  • noch ne kurze frage!
    warum passiert nicht wenn ein Button folgende Anweisung erhält:

    void ClostestDlg::OnBnClickedButton3()
    {
    WinExec(LPCSTR("C:\\WINDOWS\\system32\\devmgmt.msc"),SW_SHOW);
    }

    oder kann ich dann nur reine .exe aufrufen? Wie denn dann den Gerätemanager aufrufen?



    1. Kein WInexec da das in kommenden WinDows versionen zu komplikationen führen kann (soweit ich weiß)

    2. Funzt nich, da Winexec nur für *.exe files funktioniert

    Ich nehm dafür immer

    ShellExecute(this->GetParentOwner()->m_hWnd , //Ein Handle auf ein Fenster (funzt bei mir so, ob das richtig bzw schön is weiß ich net)
    "open",//in der Hilfe steht, das er mit "open" das File mit dem assozierten Prog öffnet
    "c:\\test.doc",//Der pfad deines File z.B.: c:\test.doc
    NULL, //DIe Parameter die übergeben werden sollen (wenn keine Param. => NULL
    NULL, //der pfad des File (muss aber wohl nich angegeben sein) 
    SW_SHOWNORMAL); //Wie das File angezeigt werden soll (Max, min, etc)
    

    so, so funzt das bei mir. (hab mir das ganze allerdings auch erst heute angeschaut _)



  • THX 🙂

    Hab das jetzt so gelöst

    ShellExecute(m_hWnd,"open","devmgmt.msc",0,0,SW_SHOW);

    und es funzt!

    So langsam entwickelt c++ für mich eine gewisse Logik........so langsam 🙂

    Dragi


Anmelden zum Antworten