Ответ 1
Вы всегда должны избегать использования system()
потому что
- Это тяжелый ресурс
- Это наносит ущерб безопасности - вы не знаете, что это действительная команда или делает то же самое в каждой системе, вы даже можете запускать программы, которые не собирались запускать. Опасность заключается в том, что когда вы выполняете программу напрямую, она получает те же привилегии, что и ваша программа. Это означает, что если, например, вы работаете системным администратором, то вредоносная программа, которую вы только что непреднамеренно выполнили, также работает как системный администратор. Если это вас не пугает, проверьте свой пульс.
- Антивирусные программы ненавидят это, ваша программа может быть помечена как вирус.
Вы должны использовать CreateProcess().
Вы можете использовать Createprocess(), чтобы просто запустить .exe и создать для него новый процесс. Приложение будет работать независимо от вызывающего приложения.
Вот пример, который я использовал в одном из моих проектов:
#include <windows.h>
VOID startup(LPCTSTR lpApplicationName)
{
// additional information
STARTUPINFO si;
PROCESS_INFORMATION pi;
// set the size of the structures
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// start the program up
CreateProcess( lpApplicationName, // the path
argv[1], // 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 environment block
NULL, // Use parent starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure (removed extra parentheses)
);
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
РЕДАКТИРОВАТЬ: ошибка, которую вы получаете, потому что вам нужно указать путь к файлу .exe, а не только имя. Openfile.exe, вероятно, не существует.