Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с CreateProcess 
V
    Опции темы
SerjogaVS
Дата 8.1.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.1.2007
Где: Нюрнберг

Репутация: нет
Всего: нет



У меня вот такая проблема, я делаю маленькую программку (SDI), которая проводит инсталяцию Oracle сервера. 
Для этого есть responsefile (OraInstSE10201.rsp), которую я через CreateProcess запускаю и жду когда он закончит инсталяцию, чтоб запустить другие функции.
Проблема в том, что он у меня не ждёт (if(WaitForSingleObject(pi.hProcess,100) != WAIT_TIMEOUT), а сразу идёт дальше, хотя эта же функция с другими процессами работает, вот только тут не хочет.
Вот маленький отрывок:
Код


CString strRspFile = "";
CString strCommand = "";

strRspFile = "Z:\\Inst\\inst_db\\OraInstSE10201.rsp";
strCommand = "Z:\\Inst\\database\\setup -silent -nowelcome -noconfig -responsefile " + strRspFile;

if(!StartProcess(strCommand))
        return FALSE;


BOOL CInitServerInstallation::StartProcess(CString _strCommand)
{
    PROCESS_INFORMATION pi;
    STARTUPINFO si;
    MSG msg;
    CString strMsg;

    memset(&si, 0, sizeof(si));
    memset(&pi, 0, sizeof(pi));
    si.cb = sizeof(si);

    // si.dwFlags = STARTF_USESHOWWINDOW; 
    // si.wShowWindow = SW_HIDE; 

    if(!CreateProcess(NULL,_strCommand.GetBuffer(_strCommand.GetLength  ()),NULL,NULL,CREATE_DEFAULT_ERROR_MODE,0,NULL,NULL,&si,&pi))
    {
        LPVOID lpMsgBuf;
        FormatMessage( 
            FORMAT_MESSAGE_ALLOCATE_BUFFER |
            FORMAT_MESSAGE_FROM_SYSTEM | 
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            GetLastError(),
            0, // Default language
            (LPTSTR) &lpMsgBuf,
            0,
            NULL 
        );
        AfxMessageBox(_T((LPCTSTR)lpMsgBuf),MB_ICONHAND|MB_OK|MB_DEFBUTTON1);
        LocalFree(lpMsgBuf);
        
        strMsg.LoadString(IDS_CREATE_PROCESS);
        AfxMessageBox(_T(strMsg),MB_ICONHAND|MB_OK|MB_DEFBUTTON1);
        return FALSE;
    }
    else
    {
        for(;;)
        {
            if(WaitForSingleObject(pi.hProcess,100) != WAIT_TIMEOUT)
                break;
            else if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
            {
               TranslateMessage(&msg);
               DispatchMessage(&msg);
            } 
        }
    }
    return TRUE;
}


Я думаю, что проблема скорей всего в том, что этот oracle setup ещё в backgroundе стартует java и ждёт пока он вернётся, а CreateProcess думает, что он уже готов?
Есть какие-нибудь идеи по этому поводу? Я уже незнаю что делать
PM MAIL   Вверх
W4FhLF
Дата 8.1.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Цитата(SerjogaVS @  8.1.2007,  19:03 Найти цитируемый пост)
(if(WaitForSingleObject(pi.hProcess,100)


Так он ждёт всего 100 миллисекунд, делай тогда уж так:

WaitForSingleObject(pi.hProcess,INFINITE) и программа не выйдет из "спячки" пока хэндл созданного тобою процесса не будет уничтожен системой.

Я правильно понял, в этом проблема?smile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
SerjogaVS
Дата 8.1.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.1.2007
Где: Нюрнберг

Репутация: нет
Всего: нет



Нет, тоже не идёт, пробывал smile
PM MAIL   Вверх
W4FhLF
Дата 8.1.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Ну твой процесс уничтожается, когда WaitForSingleObject возвращает управление, значит меняй тактикуsmile


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
SerjogaVS
Дата 8.1.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.1.2007
Где: Нюрнберг

Репутация: нет
Всего: нет



Цитата(W4FhLF @ 8.1.2007,  19:23)
Ну твой процесс уничтожается, когда WaitForSingleObject возвращает управление, значит меняй тактикуsmile

Да я вот даже другой альтернативы не вижу кроме CreateProcess. System и ShellExecute отпадают, что ещё придумать можно - незнаю smile
PM MAIL   Вверх
dumb
Дата 9.1.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



первое что в голову пришло: запускать с DEBUG_PROCESS, ловить запуски и ждать на всех.
PM MAIL   Вверх
SerjogaVS
Дата 10.1.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 8.1.2007
Где: Нюрнберг

Репутация: нет
Всего: нет



Оказывается этот setup.exe новый процесс стартует и сам уничтожается. По этому он у меня и выходит постоянно раньше времени. Теперь я попробую перечислить все процессы, найти этот новый и передать его handle функции WaitForSingleObject. Думаю так должно пойти

Это сообщение отредактировал(а) SerjogaVS - 11.1.2007, 13:52
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0518 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.