WinExec-Funktion (winbase.h)
Führt die angegebene Anwendung aus.
Syntax
UINT WinExec(
[in] LPCSTR lpCmdLine,
[in] UINT uCmdShow
);
Parameter
[in] lpCmdLine
Die Befehlszeile (Dateiname und optionale Parameter) für die auszuführende Anwendung. Wenn der Name der ausführbaren Datei im lpCmdLine-Parameter keinen Verzeichnispfad enthält, sucht das System in dieser Reihenfolge nach der ausführbaren Datei:
- Das Verzeichnis, aus dem die Anwendung geladen wurde.
- Das aktuelle Verzeichnis.
- Das Systemverzeichnis von Windows. Die GetSystemDirectory-Funktion ruft den Pfad dieses Verzeichnisses ab.
- Das Windows-Verzeichnis. Die GetWindowsDirectory-Funktion ruft den Pfad dieses Verzeichnisses ab.
- Die in der PATH-Umgebungsvariablen aufgeführten Verzeichnisse.
[in] uCmdShow
Die Anzeigeoptionen. Eine Liste der zulässigen Werte finden Sie in der Beschreibung des nCmdShow-Parameters der ShowWindow-Funktion .
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert größer als 31.
Wenn die Funktion fehlschlägt, ist der Rückgabewert einer der folgenden Fehlerwerte.
Rückgabecode/-wert | BESCHREIBUNG |
---|---|
|
Das System verfügt nicht über genügend Arbeitsspeicher oder Ressourcen. |
|
Die .exe-Datei ist ungültig. |
|
Die angegebene Datei wurde nicht gefunden. |
|
Der angegebene Pfad wurde nicht gefunden. |
Hinweise
Die WinExec-Funktion gibt zurück, wenn der gestartete Prozess die GetMessage-Funktion aufruft oder ein Timeoutlimit erreicht ist. Um zu vermeiden, dass auf die Timeoutverzögerung gewartet wird, rufen Sie die GetMessage-Funktion so schnell wie möglich in jedem Prozess auf, der durch einen Aufruf von WinExec gestartet wird.
Sicherheitsbemerkungen
Der name der ausführbaren Datei wird als erste leerzeichentrennte Zeichenfolge in lpCmdLine behandelt. Wenn die ausführbare Datei oder der Pfadname ein Leerzeichen enthält, besteht aufgrund der Art und Weise, wie die Funktion Leerzeichen analysiert, das Risiko, dass eine andere ausführbare Datei ausgeführt werden kann. Das folgende Beispiel ist gefährlich, da die Funktion versucht, "Program.exe" anstelle von "MyApp.exe" auszuführen, sofern vorhanden.WinExec("C:\\Program Files\\MyApp", ...)
Wenn ein böswilliger Benutzer eine Anwendung namens "Program.exe" auf einem System erstellen würde, führt jedes Programm, das WinExec fälschlicherweise über das Verzeichnis Programme aufruft, diese Anwendung anstelle der beabsichtigten Anwendung aus.
Um dieses Problem zu vermeiden, verwenden Sie CreateProcess anstelle von WinExec. Wenn Sie WinExec jedoch aus älteren Gründen verwenden müssen, stellen Sie sicher, dass der Anwendungsname in Anführungszeichen eingeschlossen ist, wie im folgenden Beispiel gezeigt.
WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winbase.h (Windows.h einschließen) |
Bibliothek | Kernel32.lib |
DLL | Kernel32.dll |
APIs | ext-ms-win-kernel32-process-l1-1-0 (eingeführt in Windows 10, Version 10.0.14393) |