Anwendung mit Parameter starten



  • Hallo,

    wie kann ich mit _execl, _spawnl oder irgend einer Funktion eine Anwendung mit Parametern starten. Kriege das irgendwie nicht hin.
    Ich will nicht system nehmen, weil da immer kurz die eingabeaufforderung geöffnet wird.



  • CreateProcess()?
    Shellexecute()?
    ...



  • Hm hab das ma mit CreateProcess ausprobiert. Irgendwie klappt das nicht. Das Programm wird zwar anstandslos kompiliert und gelinkt, aber der Parameter kommt nicht an.
    Is jetzt wahrscheinlich n doofer Fehler, aber ich hab noch net so viel Programmiererfahrung.
    Hier mal der Quelltext:

    STARTUPINFO info;
    PROCESS_INFORMATION proc_info;
    ZeroMemory(&info, sizeof(info));
    ZeroMemory(&proc_info, sizeof(proc_info));
    info.cb = sizeof(info);
    
    CreateProcess("neu.exe", "neu", NULL, NULL, false, CREATE_NEW_PROCESS_GROUP, NULL, NULL, &info, &proc_info);
    system("Pause");
    return 0;
    

    und hier der Code von "neu.exe":

    #include <windows.h>
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    
    {
        MessageBox(0, lpszArgument, "param", MB_OK);
    
        return 0; 
    }
    


  • PROCESS_INFORMATION ProcessInfo;
    		memset(&ProcessInfo, 0, sizeof(ProcessInfo));
    		STARTUPINFOW StartupInfo;
    		memset(&StartupInfo, 0, sizeof(StartupInfo));
    		StartupInfo.cb = sizeof(StartupInfo);
    
    		wchar_t cmd[MAX_PATH];
    		memset(cmd, 0, MAX_PATH * sizeof( wchar_t) );
    		wchar_t * buffer = _wgetcwd(cmd, MAX_PATH);
    		wcscat(cmd, L"\\neu.exe deinparameter");
    
    		if(CreateProcessW(NULL, cmd, NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, 0, 0, &StartupInfo, &ProcessInfo))
    		{
                           printf("yay\n");
                    }
    


  • Benutz dazu noch ResumeThread(....)



  • Hierfür ist die Funktion WinExec() zu empfehlen!


  • Mod

    berniebuttson schrieb:

    Hierfür ist die Funktion WinExec() zu empfehlen!

    Quote aus WinExec Doku:

    Note This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.

    Oder eben ShellExecute!



  • Jo klappt jetzt, allerdings hab ich das net mit SUSPEND gemacht und dann auch nicht ResumeThread genommen. Gibts n besonderen Grund warum man das so machen sollte, wenn man den Prozess direkt starten will?
    Wie hätte ich eigentlich das Handle für ResumeThread herbekommen? Mit OpenProcess?


  • Mod

    Vergiss das mit Suspend.
    Du bekommst das Handle in PROCESS_INFORMATION übergeben.

    Nimm ShellExecute, das ist weitaus einfacher.


Anmelden zum Antworten