Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 01:28   #1
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию Запуск одной программы из другой

Добрый день, в общем я бы хотел запустить одну программу из другой. Для этого существует функция WinExec.
Есть небольшой вопрос, для начала, как эта функция работает, и второй вопрос, вернет ли она меня к программе из которой я запустил текущую программу?
CodeNOT вне форума Ответить с цитированием
Старый 27.05.2011, 01:36   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Для этого существует функция WinExec

неа, для этого уже лет 16 существует CreateProcess()

> вернет ли она меня

вернет ли сразу управление? скорей всего да (речь про WinExec, CreateProcess вернёт сразу же).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.05.2011, 01:40   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

хм пример не могли бы привести?
CodeNOT вне форума Ответить с цитированием
Старый 27.05.2011, 01:41   #4
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

и данная функция сохранит весь контекст программы из которой запустили?
CodeNOT вне форума Ответить с цитированием
Старый 27.05.2011, 01:53   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> хм пример не могли бы привести?

легко

> и данная функция сохранит весь контекст программы из которой запустили?

если контекст == окружение, то:

Цитата:
lpEnvironment [in, optional]

A pointer to the environment block for the new process. If this parameter is NULL, the new process uses the environment of the calling process.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 27.05.2011, 01:55   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

что значит сохранит контекст?
она запустит процесс и все(либо на паузе либо нет)
можно перенаправить потоки stdin,stdout,stderr.
и еще немного настроек.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.05.2011, 02:06   #7
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

хм, тогда еще один вопрос, как мне вывести программу из режима ожидания, если я процесс запускаемой программы буду уничтожать в ней же?
CodeNOT вне форума Ответить с цитированием
Старый 27.05.2011, 02:10   #8
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

Код:
STARTUPINFO cif;
        ZeroMemory(&cif,sizeof(STARTUPINFO));
        PROCESS_INFORMATION pi;
        CreateProcess("C:\\Program Files (x86)\\Borland\\CBuilder6\\Projects\\lab_os 3\\Project12.exe",NULL,NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi);
       Sleep(9000);
        TerminateProcess(pi.hProcess,NO_ERROR);
если я выполню функцию TermonateProcess в Project12.exe то как мне вывести текущую программу из ожидания?
CodeNOT вне форума Ответить с цитированием
Старый 27.05.2011, 02:10   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а если вы не поставите ожидание, то собственно говоря ваш процесс и не будет ждать завершения
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.05.2011, 02:13   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
если я выполню функцию TermonateProcess в Project12.exe то как мне вывести текущую программу из ожидания?
не очень ожидание.
у вас в pi есть хендл процесса(который кстати надо закрыть потом, так же как и потока)
по нему и ждите через WaitForSingleObject
если она вернет WAIT_TIMEOUT значит процесс еще не завершился
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
позиция одной строки в другой Даниил_глазко Помощь студентам 1 21.11.2010 18:17
Запуск только одной копии приложения Casper-SC Общие вопросы .NET 1 18.07.2010 02:06
Как вызвать функцию одной программы из другой. KobolD Помощь студентам 8 10.06.2010 15:06
Запуск нескольких клиентов с одной машины unit-85 Работа с сетью в Delphi 4 16.03.2009 13:02
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33