Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > И опять CreateProcess


Автор: Zakhar_Shan 10.7.2009, 14:02
Блин в поиске ничего рабочего для себя не нашел, поэтому обращаюсь за помощью.
Опять же, две консольные проги.
First запускает через CreateProcess Second, лежат в одном каталоге...
Листинги:
First:
Код

int main(int argc, char* argv[])
{
    cout<<"Hello!!! I'm First";
    STARTUPINFO sInf;
    PROCESS_INFORMATION pInf;
    char cmd[] = "Second.exe";
    CreateProcess(NULL, cmd ,
            NULL, NULL, FALSE,
            NULL,
            NULL, NULL, &sInf, &pInf);

    return 0;
}


Second:
Код

int main(int argc, char* argv[])
{
    cout<<"Hello!!! I'm Second";
    return 0;
}



Проблема в том что First запускается, но Second через First   не хочет.
Помогите!!!!

Автор: ИванМ 10.7.2009, 14:39
StartupInfo, ProcessInfo и sInf; pInf; - разные названия. Как это вообще работает? Глобально что ли первые определены?

Автор: mrbrooks 10.7.2009, 14:42
Цитата(Zakhar_Shan @  10.7.2009,  14:02 Найти цитируемый пост)
Блин в поиске ничего рабочего для себя не нашел, поэтому обращаюсь за помощью.

Плохо искал  smile Удивительно как вообще твой пример собрался (см. на переменные связанные со структурами). 

Код

int main(int argc, char* argv[])
{
    cout<<"Hello!!! I'm First";
    STARTUPINFO sInf = {0};
    sInf.cb = sizeof(STARTUPINFO);
    PROCESS_INFORMATION pInf;
    char cmd[] = "Second.exe";
    CreateProcess(NULL, cmd , NULL, NULL, FALSE, 0, NULL, NULL, &sInf, &pInf); //вывод из Second в First
    //CreateProcess(NULL, cmd , NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &sInf, &pInf); //создание отдельной консоли под Second
    std::cin.get();
    return 0;
}


Добавлено через 51 секунду
Цитата(ИванМ @  10.7.2009,  14:39 Найти цитируемый пост)
StartupInfo, ProcessInfo и sInf; pInf; - разные названия. Как это вообще работает? Глобально что ли первые определены? 

наверно просто косяк с копи-пастом  smile 

Автор: 586 10.7.2009, 14:52
Не забывайте закрывать дескрипторы pInf.hThread и pInf.hProcess, если они не нужны.
Код
int main(int argc, char* argv[])
{
    cout<<"Hello!!! I'm First";
    STARTUPINFO sInf = {0};
    sInf.cb = sizeof(STARTUPINFO);
    PROCESS_INFORMATION pInf;
    char cmd[] = "Second.exe";
    CreateProcess(NULL, cmd , NULL, NULL, FALSE, 0, NULL, NULL, &sInf, &pInf); //вывод из Second в First
    //CreateProcess(NULL, cmd , NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &sInf, &pInf); //создание отдельной консоли под Second
    CloseHandle(pInf.hThread);
    CloseHandle(pInf.hProcess);
    std::cin.get();
    return 0;
}

Автор: Zakhar_Shan 10.7.2009, 15:57
Цитата(ИванМ @  10.7.2009,  14:39 Найти цитируемый пост)
StartupInfo, ProcessInfo 
 - блин, это простите, тупняк, я то в исполняемом файле все правильно сделал, просто чистил  чтоб понятно было на форуме, лишние убрал, и нечаянно заменил

Автор: THandle 10.7.2009, 16:19
Цитата(586 @  10.7.2009,  15:52 Найти цитируемый пост)
Не забывайте закрывать дескрипторы pInf.hThread и pInf.hProcess, если они не нужны.


Ну тогда закрывать их нужно еще только при условии что CreateProcess отработало smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)