BOOL CreateProcess(
LPCTSTR lpApplicationName, // имя приложения с путем ("С:\\1.exe")
LPTSTR lpCommandLine, // командная строка (параметры)
LPSECURITY_ATTRIBUTES lpProcessAttributes, // свойства процесса
LPSECURITY_ATTRIBUTES lpThreadAttributes, // гл. потока
BOOL bInheritHandles, // наследовать хендлы (я пишу false)
DWORD dwCreationFlags, // флаги
LPVOID lpEnvironment, // новое окружение (PATH,%systemroot% и т.д)
LPCTSTR lpCurrentDirectory, // рабочая папка
LPSTARTUPINFO lpStartupInfo, // STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // инфо о пр-се
);
Запуск процесса
Мучаюсь, не могу разобраться какая функция запускает внешний exe-файл и недожидается завершения работы этой программы заканчивает работу. В MSDN целый выводок exec-ов всяких и для всех один комментарий, типа она запускает дочерний процесс. А кто дожидается завершения проги, кто нет - голяк какой-то. Прошу помочь.
Заранее спасибо.
exec - ждет процес
spawn - не ждет
но все равно юзай CreateProcess
Или ShellExecute/WinExec
WinExec самая простая и самая лучшая, автоматически ищет ассоциации
Цитата:
WinExec самая простая и самая лучшая, автоматически ищет ассоциации
Цитата:
Win32-based applications should use the CreateProcess function rather than this function. The WinExec function exists in Win32 to provide compatibility with earlier versions of Windows.
Говоря по-русски, WinExec устарела. Самая универсальная вообще-то CreateProcess, имхо, с ней лучше разобраться.
и чайникам её проще понять
и чайникам её проще понять[/QUOTE]
Код:
Тута:
lpApplicationName - если NULL, приложение берется из след. параметра
lpCommandLine - если lpApp==NULL, имя приложения, иначе параметры или ничего.
lpProcessAttributes, lpThreadAttributes почти всегда NULL, разберешься по мере надобности
--------
dwCreationFlags:
CREATE_NEW_CONSOLE - no comment
CREATE_SHARED_WOW_VDM - на ВОВ забей, она мертва. (Это не
Великая Отечественная Война, это Win16 On Win32)
DETACHED_PROCESS - для консоли, новый процесс не имеет доступа к
старой консоли
+ суда приоритеты:
NORMAL_(ИЛИ IDLE_; HIGH_; REALTIME_; )PRIORITY_CLASS,
+ создать замороженным:
CREATE_SUSPENDED
--------
lpEnvironment = NULL //используешь старое окружение
--------
lpStartupInfo - заполни заранее
lpStartupInfo.cb=sizeof(STARTUPINFO);
остально можно не использовать, см. справку
--------
PROCESS_INFORMATION *pi - получает инфу о созданном процессе.
--------
Если все удачно, ф-ция вернет не 0;
---------------------------
Если с этим трудно разобраться, используй WinExec. И VisualBasic :)
Оно себя окупит, читай справку