Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Тут возник вопрос: как бы приостановить действие батника, содержащего несколько последовательных вызовов hidec? Дело в том, что в таком случае программы вызываются практически одновременно, а иногда надо подождать сначала завершения одного процесса, а затем выполнить вызов следующего приложения.

Вот ответ:

Код: Выделить весь код
#include <process.h> 
#include <stdio.h> 
#include <windows.h> 
 
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpszCmd,int nCmd) 
{ 
    STARTUPINFO si; 
    PROCESS_INFORMATION pi; 
    int bWait = 0;

    if ((lpszCmd[0] == '/')&&(lpszCmd[1] == 'W')&&(lpszCmd[2] == 0x20))
    { bWait = 1; lpszCmd += 3; }

    /* create process with new console */ 
    memset(&si,0,sizeof(si)); 
    si.cb = sizeof(si); 
    si.dwFlags = STARTF_USESHOWWINDOW; 
    si.wShowWindow = SW_HIDE; 
    if( CreateProcess( NULL, lpszCmd, 
                       NULL, NULL, FALSE, CREATE_NEW_CONSOLE, 
                       NULL, NULL, &si, &pi ) ) 
    { 
	if (bWait) WaitForSingleObject(pi.hProcess, INFINITE);
        CloseHandle( pi.hProcess ); 
        CloseHandle( pi.hThread ); 
    } 
 
    /* terminate this */ 
    return 0; 
}
Вызовы из батника выглядят так (это просто ни к чему не обязывающий пример):

Код: Выделить весь код
hidec.exe dontwaitme_1.exe
hidec.exe dontwaitme_2.exe
hidec.exe /W 1st_app_with_wait.exe
@echo Stage 1 completed...
...
hidec.exe /W 2nd_app_(also_wait).bat
@echo Stage 2 completed...
...
Программа hidec, вызванная с параметром /W будет ждать выполнения "своего" процесса.
Надеюсь, кому-то пригодится. Готовый (скомпилёный) вариант екзешника: тут (22K, сжато в зип до 11К)
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:07, 27-06-2005 | #3