Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Открытие приложения [D6, WinXP]


viper - omsk ©   (2005-04-26 19:17:00) 

Подскажите, пожалуйста, как можно из одного приложения запустить другое? Т.е., например, при нажатии на кнопку запускается какой-нибудь exe-шник!


viper - omsk   (2005-04-29 10:51:00) [1]


> WinExec - это не кошерно

Зато работает! Всем спасибо за помощь!


КиТаЯц   (2005-04-29 08:42:00) [2]

> 2 begin...end ©   (28.04.05 19:33) [4]
...и реагировать на это надо, вероятно, спокойнее.


Спасибо, что вежливотак отчитали... :)
Согласен что: "...всё дело -- в трактовке исходного вопроса. Она у разных отвечающих может быть разной..."
Моя реакция обусловлена тем, что (как мне показалось) был вопрос начинающего программиста об элементарной вещи (см. "Функцию ShellExecute я не нашел").
А челу предлагают отправится в "дебри API", в результате такой ответ вызывает новый вопрос и ветка разрастается до несуразной величины и потом прямым ходом в "орешник"...

зы. С расширениями помню сам как-то заморачивался... WinExec, кстати, тоже перименованые EXE-шники отлично запускает.


Fay   (2005-04-28 20:25:00) [3]

2 viper - omsk   (27.04.05 4:42) [2]
void main( VOID )
{
   STARTUPINFO si;
   PROCESS_INFORMATION pi;

   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );

   // Start the child process.
   if( !CreateProcess( NULL, // No module name (use command line).
       "MyChildProcess", // Command line.
       NULL,             // Process handle not inheritable.
       NULL,             // Thread handle not inheritable.
       FALSE,            // Set handle inheritance to FALSE.
       0,                // No creation flags.
       NULL,             // Use parent's environment block.
       NULL,             // Use parent's starting directory.
       &si,              // Pointer to STARTUPINFO structure.
       &pi )             // Pointer to PROCESS_INFORMATION structure.
   )
   {
       ErrorExit( "CreateProcess failed." );
   }

   // Wait until child process exits.
   WaitForSingleObject( pi.hProcess, INFINITE );

   // Close process and thread handles.
   CloseHandle( pi.hProcess );
   CloseHandle( pi.hThread );
}


Fay   (2005-04-28 20:24:00) [4]

КиТаЯц ©   (27.04.05 7:39) [3]
WinExec - это не кошерно
ShellExecute - не джедайский подход

Если нужно создать процесс - создавай процесс.


begin...end   (2005-04-28 19:33:00) [5]

> viper - omsk   (27.04.05 4:42) [2]

> Функцию ShellExecute я не нашел

Описание функции находится в справке по API: Help -> Windows SDK. А чтобы использовать функцию в delphi, достаточно включить в список uses модуль ShellAPI.

> а в CreateProcess куча разных параметров

...большинство из которых может быть равно nil.

> КиТаЯц ©   (27.04.05 7:39) [3]

> Какой к черту CreateProcess когда у человека возникает
> вопрос всего лиш "как запустить exe-шник"?!!!!!

А Вы не задавались вопросом, что понимается под "exe-шником"? Файл с расширением exe или любой файл исполняемого модуля? Проведите эксперимент: возьмите исполняемый файл (какой-нибудь файл с расширением exe) и измените его расширение на какое-нибудь другое -- скажем, на "bin". А затем попробуйте его запустить с помощью ShellExecute. Файл не запустится, хотя его содержимое осталось тем же самым -- поменялось только расширение. А если использовать CreateProcess, то этот файл запустится. Независимо от того, какое у него расширение.

Так что всё дело -- в трактовке исходного вопроса. Она у разных отвечающих может быть разной, и реагировать на это надо, вероятно, спокойнее.


КиТаЯц   (2005-04-27 07:39:00) [6]

> begin...end ©   (26.04.05 19:17) [1]
Какой к черту CreateProcess когда у человека возникает вопрос всего лиш "как запустить exe-шник"?!!!!!
> viper - omsk   (27.04.05 04:42) [2]
Забудь!
Пользуйся ShellExecute или, еще проще, WinExec('Имя ЕХЕ-шника', SW_RESTORE);


viper - omsk   (2005-04-27 04:42:00) [7]

Функцию ShellExecute я не нашел, а в CreateProcess куча разных параметров, можно ли описать что каждый из них делает (желательно на примере)!


begin...end   (2005-04-26 19:17:00) [8]

См. API-функции ShellExecute или CreateProcess.


Наверх

Титульная страница Поиск, карта сайта Написать письмо