CreateProcess () schlägt mit einer Zugriffsverletzung fehl [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Nicht behandelter Fehler mit CreateProcess [duplizieren] 2 AntwortenMein Ziel ist es, eine externe ausführbare Datei in meinem Programm auszuführen. Zuerst habe ich verwendetsystem()
Funktion, aber ich möchte nicht, dass die Konsole für den Benutzer sichtbar ist. Also habe ich ein bisschen gesucht und gefundenCreateProcess()
Funktion. Wenn ich jedoch versuche, einen Parameter an ihn zu übergeben, weiß ich nicht, warum dies fehlschlägt. Ich habe diesen Code von MSDN genommen und ein bisschen geändert:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void _tmain( int argc, TCHAR *argv[] )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
/*
if( argc != 2 )
{
printf("Usage: %s [cmdline]\n", argv[0]);
return;
}
*/
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line)
L"c:\\users\\e\\desktop\\mspaint.exe", // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Dieser Code verursachte jedoch irgendwie eine Zugriffsverletzung. Kann ich mspaint ausführen, ohne dem Benutzer die Konsole anzuzeigen?
Vielen Dank.