Моя цель сделать так, чтобы программа начинала выполнять дальнейший код только после того, как cmd.exe выполнит команду и умрёт. Так, чтобы после смерти процесса cmd.exe программа начинала выполнять команду cout << "test" << endl;
Сам код:
#include <iostream>
#include "windows.h"
using namespace std;
int main()
{
ShellExecuteW(0, L"open", L"cmd.exe", L"/C pause", 0, SW_SHOW);
cout << "test" << endl;
}
Когда я компилирую пример от user7860670
У меня вылетает компилятор с ошибкой:
if ($?) { g++ writer.cpp -o writer } ; if ($?) { .\writer } D:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\mattc\AppData\Local\Temp\cc7ezUqJ.o:writer.cpp:(.text+0x23): undefined reference to '__imp_CoInitializeEx' D:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\mattc\AppData\Local\Temp\cc7ezUqJ.o:writer.cpp:(.text+0x17f): undefined reference to '__imp_CoUninitialize' collect2.exe: error: ld returned 1 exit status
#include <stdlib.h> int system(const char *command);– AlexGlebe Feb 13 '24 at 12:23ShellExecuteEx+WaitForSingleObject. – user7860670 Feb 13 '24 at 13:25ShellExecuteExзаполняет дескриптор созданного процесса – user7860670 Feb 13 '24 at 14:18ShellExecuteExа неShellExecuteW. – HolyBlackCat Feb 13 '24 at 14:47cnsl.hProcess, но ожидание то не работает, то работает, то вылетает, как это пофиксить? – adisteyf Feb 13 '24 at 17:34SHELLEXECUTEINFOнеобходимо инициализировать нулями перед заполнением перед отправкой в функцию, а у вас в половине полей мусор. Еще перед использованиемShellExecuteExнеобходимо выполнятьCoInitializeEx. А результаты вызовов - проверять. ПолеlpFileобычно только для имени исполняемого файла, а аргументы следует в поле параметров пихать. – user7860670 Feb 13 '24 at 18:17