Вопрос

У меня есть мое основное приложение, из моего основного приложения я буду вызывать другой модуль (сторонний) для выполнения небольшой операции в моем основном приложении, когда я вызываю это 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*.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top