Я хочу, чтобы эта программа либо A) прикреплялась к существующему именованному сопоставленному файлу для отправки данных в ранее запущенное консольное приложение или B) запустите консольное приложение (с DETACHED_PROCESS), а затем сопоставьте с файлом только что созданный процесс. События и мьютексы синхронизируют все.
Сопоставленный файл используется для передачи сложных сообщений туда и обратно.
Проблема в том, что когда программа C++ создает процесс работает под Apache24, созданный процесс не имеет консольного окна. Когда тот же код выполняется в режиме отладки из Visual Studio 2022, он работает нормально и имеет окно консоли.
Созданный процесс начинается со следующего:
Код: Выделить всё
bool console_created = AllocConsole();
if (console_created) {
FILE* fpstdin = stdin, * fpstdout = stdout, * fpstderr = stderr;
freopen_s(&fpstdin, "CONIN$", "r", stdin);
freopen_s(&fpstdout, "CONOUT$", "w", stdout);
freopen_s(&fpstderr, "CONOUT$", "w", stderr);
}
Я не знаю, насколько мне известно. заголовок того, что Apache использует для учетной записи. VS работает под моей учетной записью пользователя рабочего стола.
Под Apache процесс запускается, но ожидаемого результата от AllocConsole + freopen() не происходит. Кроме того, если отсоединенный процесс уже запущен через VS, программа cgi не видит указанный сопоставленный файл и запускает второй экземпляр отсоединенного процесса.
Я довольно дотошен. о проверке статуса возврата от каждого вызова и все утверждает, что все в порядке.
Отладка программы, работающей под Apache, по меньшей мере, утомительна. Я создал файл журнала процесса запуска, но он не дал никакой полезной информации.
Подробнее здесь: https://stackoverflow.com/questions/784 ... ole-window
Мобильная версия