Согласно комментарию пользователя 4581301.Вот код C ++, который я сгенерировал.
Использование CreateProcess :
Следующий код компилируется в Side.exe и запускает Main.exe, если онеще не запущен.
if (!FindProcessId(L"Main.exe")) {
LPTSTR szCmdline = _tcsdup(TEXT("\"C:\\Program Files (x86)\\Path\\To\\Main\""));
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si)); //Use default startup info
ZeroMemory(&pi, sizeof(pi));
CreateProcess(NULL,
szCmdline,
NULL,
NULL,
FALSE,
CREATE_BREAKAWAY_FROM_JOB,
NULL,
NULL,
&si,
&pi
);
}
Поскольку мой конкретный проект включает внедрение DLL и представляет собой конечный автомат конечного пользователя Qt, контролирующий Main.exe, при изменении состояния я запустил бы это:
if (!dllInjector.GetProcessID(MAIN_PROCESS_NAME))
{
// Code ommitted for brevity
OnExitClick();
// Simulates exit click "QApplication::exit();"
}
, которыйзакроет Side.exe
, если Main.exe
не будет обнаружен.
Таким образом, поведение выглядит следующим образом: Запуск Side.exe запускает Main.exe;закрытие Main.exe закрывает Side.exe;однако это не запускает Side.exe при запуске Main.exe.Другие подходы, прокомментированные в моем вопросе, кажутся жизнеспособными.