Freigeben über


WinExec-Funktion (winbase.h)

Führt die angegebene Anwendung aus.

Hinweis Diese Funktion wird nur zur Kompatibilität mit 16-Bit-Windows bereitgestellt. Anwendungen sollten die CreateProcess-Funktion verwenden.
 

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:

  1. Das Verzeichnis, aus dem die Anwendung geladen wurde.
  2. Das aktuelle Verzeichnis.
  3. Das Systemverzeichnis von Windows. Die GetSystemDirectory-Funktion ruft den Pfad dieses Verzeichnisses ab.
  4. Das Windows-Verzeichnis. Die GetWindowsDirectory-Funktion ruft den Pfad dieses Verzeichnisses ab.
  5. 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
0
Das System verfügt nicht über genügend Arbeitsspeicher oder Ressourcen.
ERROR_BAD_FORMAT
Die .exe-Datei ist ungültig.
ERROR_FILE_NOT_FOUND
Die angegebene Datei wurde nicht gefunden.
ERROR_PATH_NOT_FOUND
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)

Weitere Informationen

CreateProcess