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!
-
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?
-
Vergiss das mit Suspend.
Du bekommst das Handle in PROCESS_INFORMATION übergeben.Nimm ShellExecute, das ist weitaus einfacher.