Проблема в функции CreateProcess!
-
19-09-2019 - |
Вопрос
У меня есть мое основное приложение, из моего основного приложения я буду вызывать другой модуль (сторонний) для выполнения небольшой операции в моем основном приложении, когда я вызываю это module..it процессы в течение определенного времени, скажем, 5 секунд. во время его обработки он показывает процесс в окне commmand с некоторой информацией .. теперь мое основное приложение ожидает, пока вызываемый модуль завершит свой процесс.Теперь мой вопрос в том, .. как мне скрыть это командное окно, не нарушая его процесс..Я пытался использовать createprocess, но, похоже, это не работает...
например:мое основное приложение - это родительский процесс, а вызываемое приложение - дочерний процесс..Родительский процесс должен быть независимым от дочернего процесса .. посмотрите мой пример ниже
int main()
{
execl("c:\\users\\rakesh\\Desktop\\calledapplication.exe","c:\\users\\rakesh\\Desktop \\calledapplication.exe",0);
}
code in calledapplication
int main
{
printf("Rakesh");
}
теперь, учитывая вышесказанное, если вы запустите первую программу ... вывод появится в том же самом окне командное окно (Оно не должно быть таким)...Я хочу, чтобы основное приложение создало процесс, но на него не должен влиять дочерний процесс.
Решение
Пройти CREATE_NO_WINDOW
в dwCreationFlags
параметр CreateProcess
.
Другие советы
Вы говорили о "командном окне", поэтому я предполагаю, что дочерним является консольное приложение.В этом случае вы можете создать процесс в отдельном коноле и при желании принудительно отобразить новую консоль в виде значка или скрыть ее.Следующий код запускает дочерний процесс, который интерпретирует командный файл (mytest.bat).Я надеюсь, что это может помочь.С уважением.
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL rv = FALSE;
WCHAR cmdline[] = TEXT("cmd.exe /c mytest.bat");
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
// Add this if you want to hide or minimize the console
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE; //or SW_MINIMIZE
///////////////////////////////////////////////////////
memset(&pi,0,sizeof(pi));
rv = CreateProcess(NULL, cmdline, NULL, NULL,
FALSE, CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi);
if (rv) {
WaitForSingleObject(pi.hProcess, INFINITE);
printf("Done! :)\n");
}
else {
printf("Failed :(\n");
}
return rv ? 0 : 1;
}
Похоже, вы хотите, чтобы выходные данные дочернего процесса отображались в отдельном окне.Если да, то вы хотите позвонить CreateProcess
и передайте ему CREATE_NEW_CONSOLE
флаг, а не использование exec*
.