Externes Programm starten [HILFE]

Guimaster

Grünschnabel
Hallo Community,

wie ihr schon sehen könnt bin ich sehr neu und habe auch direkt eine Frage. Ich hoffe ich bin dazu auch in der richtigen Sektion. Also es geht darum:

Ich lerne gerade Visual C++ und habe auch ein nettes eBook gefunden. Ich bin an einem Beispiel, wo gezeigt wird, wie man ein externes Programm per ComboBox und einem"Programm Starten" Button startet. Es wird kein Fehler ausgegeben, aber es startet auch das Programm nicht. Es passiert gar nichts. Hier mal der Quellcode:

Code:
void CSteuerelementeDlg::OnRunpgm() 
{
// Lokale Variable zur Aufnahme des Programmnamens deklarieren
 CString strPgmName;

// Programmname in die lokale Variable kopieren
 strPgmName = m_strProgToRun;

// Programmname in Großbuchstaben umwandeln
strPgmName.MakeUpper();

 // Programm Paint gewählt?
if (strPgmName == "PAINT")
 // Ja, Paint starten
 WinExec("C:\WINDOWS\system32\mspaint.exe", SW_SHOW);

// Editor (Notepad) gewählt?
if (strPgmName == "EDITOR")
 // Ja, Editor starten
 WinExec("notepad.exe", SW_SHOW);

// Solitär gewählt?
 if (strPgmName == "SOLITÄR")
 // Ja, Solitär starten
 WinExec("sol.exe", SW_SHOW);
}

Jop also das ist die Funktion. Ich hoffe ihr könnt mir helfen, so das es funktioniert, denn ich will auch nciht weiter machen, ohne meinen Fehler zu finden. Die Variable ist korrektgesetzt, da ich den m_strProgToRun nicht nochmal zuordnen kann. Also VC++ gibtaus, dass die Variablen bereits zugeordnet sind. Ich wieß leider nicht mehr weiter.

Mfg Guimaster
 
Vermutlich werden die Dateien nicht gefunden.

Benutze den Debugger. Prüfe, ob das Programm wirklich zu einem de WinExecs durchkommt. Wenn ja, lass dir nach dem Aufruf von WinExec mit GetLastError den Fehlercode zurückgeben. Der dürfte vermutlich 2 sein (File not found).

Gib den kompletten Pfad für die Programme an.

Bei mspaint hast du einen kleinen Fehler; wenn du Backslashes so im Programm eingibst, musst du zwei Backslashes hintereinander angeben:

WinExec("C:\\WINDOWS\\system32\\mspaint.exe", SW_SHOW);
 
So hab grad ml den Debugger durchlaufen lassen und folgendes steht unten bei "Debug"

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded symbols for 'C:\WINDOWS\system32\MFC42D.DLL'
Loaded symbols for 'C:\WINDOWS\system32\MSVCRTD.DLL'
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42loc.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\uxtheme.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTF.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTFIME.IME', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
The thread 0xE8C has exited with code 2 (0x2).
The program 'C:\Dokumente und Einstellungen\Günay\Desktop\VC++\Tests\Steuerelemente\Debug\Steuerelemente.exe' has exited with code 2 (0x2).

kp was das heién soll und das mit dem backslash geht leider uch nicht wird einfach nciht gestartet.
 
Hi,

setze mal einen Breakpoint auf

strPgmName = m_strProgToRun;

und schau dann im Einzelschritt, was danach passiert.
Die Liste, die du hier präsentiert hast, zeigt nur, welche Module geladen wurden und sagt nichts aus, was wo passiert ist.

Mfg

langer
 
Wo kommt der ExitCode 0x02 her? Gibst du GetLastError am Ende der WinMain zurück?

0x02 heisst "File not found". Da stimmt etwas mit den Pfaden/Dateinamen einfach nicht.
Versuch mal ein ganz einfaches leeres Testprojekt, wo du nur den WinExec-Aufruf drin hast. Bastle da dran rum, bis es läuft.

Das muss funktionieren:
WinExec("C:\\WINDOWS\\system32\\mspaint.exe", SW_SHOW);
 
Zurück