Проблема в функции CreateProcess! - PullRequest
2 голосов
/ 10 марта 2010

У меня есть основное приложение, из основного приложения я буду звонить другому модуль (третье лицо), чтобы выполнить небольшую операцию в моем основном приложении, когда я вызываю этот модуль .. он обрабатывает в течение определенного времени, скажем, 5 секунд. при его обработке он показывает процесс в окне команды с некоторой информацией .. теперь мой Основное приложение ждет, пока вызываемый модуль завершит свой процесс. Теперь мой вопрос ... как мне скрыть это командное окно, не нарушая его процесс .. Я пытался использовать createprocess, но, похоже, он не работает ...

например: мое основное приложение - это родительский процесс, а вызываемое приложение - дочерний процесс. Родительский процесс должен быть независимым от дочернего процесса. Проверьте мой пример ниже

int main()
{
  execl("c:\\users\\rakesh\\Desktop\\calledapplication.exe","c:\\users\\rakesh\\Desktop    \\calledapplication.exe",0);


}

code in calledapplication
int main
{
  printf("Rakesh");
}

Теперь, учитывая вышесказанное, если вы запускаете первую программу ... вывод будет выглядеть так же командное окно (не должно быть так) ... Я хочу, чтобы основное приложение создавало процесс, но дочерний процесс не должен на него влиять.

Ответы [ 3 ]

4 голосов
/ 10 марта 2010

Pass CREATE_NO_WINDOW в параметре dwCreationFlags CreateProcess.

1 голос
/ 10 марта 2010

Вы говорили о «командном окне», поэтому я предполагаю, что дочерний элемент является консольным приложением. В этом случае вы можете создать процесс в отдельном коноле и, при желании, заставить новую консоль иконизировать или скрыть. Следующий код запускает дочерний процесс, который интерпретирует пакетный файл (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;
}
0 голосов
/ 10 марта 2010

Похоже, вы хотите, чтобы вывод дочернего процесса отображался в отдельном окне. Если это так, вы хотите вызвать CreateProcess и передать ему флаг CREATE_NEW_CONSOLE вместо использования exec*.

...