Модераторы: Daevaorn
  

Поиск:

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


Бывалый
*


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

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



Есть программа, которая создаёт загрузочные дискеты для Win XP (makebt32.exe). При её запуске просят ввести букву дисковода и нажать любую клавишу.
Через CreateProcess запускаю программу с параметром a:
Код

    STARTUPINFO si = { sizeof(STARTUPINFO) };
        PROCESS_INFORMATION pi;

    string AppPath="\\BOOTDISK\\makebt32.exe";

    CreateProcess(AppPath.c_str(), "makebt32 a" ,NULL,NULL,FALSE, 0,NULL,NULL,&si,&pi);    

    WaitForSingleObject( pi.hProcess, INFINITE );

        CloseHandle( pi.hProcess );
        CloseHandle( pi.hThread );


Программа не запускается. Что не так?

P.S. А как решить проблему с нажатием "любой клавишы".
PM MAIL   Вверх
NextAlex
Дата 22.3.2006, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.8.2005
Где: Украина, г. Одесс а

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



Код

#define curDir L".\\BOOTDISK\\"
#define process L".\\BOOTDISK\\makebt32.exe a:"
...
            PROCESS_INFORMATION l_NewProcessInfo = {0}; 
            STARTUPINFO l_NewProcessStartupInfo = {0}; 
 
            l_NewProcessStartupInfo.cb = sizeof(STARTUPINFO); 
            l_NewProcessStartupInfo.dwFlags = STARTF_USESHOWWINDOW; 
            l_NewProcessStartupInfo.wShowWindow = SW_SHOWNORMAL; 
            if (!CreateProcess(process, NULL, NULL, NULL, false, 0,NULL, curDir, &l_NewProcessStartupInfo, &l_NewProcessInfo)){
    TCHAR szBuf[80] = ""; 
     LPVOID lpMsgBuf;
        FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0, NULL );

       wsprintf(szBuf, 
        "%s failed with error ", 
        lpMsgBuf);

    MessageBox(NULL, szBuf, "Error", MB_OK); 

    LocalFree(lpMsgBuf);
}


и кстати у тебя путь неправильно указан - нужно либо писать полный путь либо перед первым слешем точку ставить

Это сообщение отредактировал(а) NextAlex - 22.3.2006, 10:06
--------------------
Говорила мама: "Учись играть на скрипке". Не хотел носить ноты - будешь носить пианино ...
PM MAIL ICQ   Вверх
Rutti
Дата 26.3.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



NextAlex

Спасибо! Всё нормально. Правда, я немного переделал этот вариант:
Код

std::string WXP=".\\BOOTDISK\\makebt32.exe a";

std::string CutCurDir(std::string AppPath)
{
    std::string::size_type i=AppPath.std::find(".exe");
    AppPath.erase(i, AppPath.size());
    i=AppPath.rfind("\\");
    AppPath.erase(i, AppPath.size());

        return AppPath;
}

DWORD WINAPI WinXP( LPVOID lpParam) 
{
        using namespace::std;

        STARTUPINFO si = { sizeof(STARTUPINFO) };
        PROCESS_INFORMATION pi;

        si.cb = sizeof(STARTUPINFO);
        si.dwFlags = STARTF_USESHOWWINDOW;
        si.wShowWindow = SW_SHOWNORMAL;

        string curDir=CutCurDir(WXP);

        char cmd[256];
        string b=WXP;
        strcpy(cmd, b.c_str());

        if(!CreateProcess(NULL, cmd, NULL, NULL, false, 0,NULL, curDir.c_str() , &si, &pi))
        {
                TCHAR szBuf[80] = "";
                LPVOID lpMsgBuf;
                FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL );
                wsprintf(szBuf, "%s",lpMsgBuf);
                MessageBox(NULL, szBuf, "Ошибка", MB_OK|MB_ICONWARNING);
                LocalFree(lpMsgBuf);
        }

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

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

        return 0;
}



Но вот беда какая-то: не могу запихнуть в DWORD WINAPI WinXP( LPVOID lpParam) другие пути (т.е. что бы при определённои условии запускалась не ".\\BOOTDISK\\makebt32.exe a", а какие-нибудь другие програмки).
Делаю глобальную переменную, значение которой указвает на вариант выбора программы. В DWORD WINAPI WinXP( LPVOID lpParam) сразу после определения пространства имён делаю switch(...) {...} и определяю string-переменную, которая будет использоваться в curDir и cmd, и ей, в зависимости от выбранного варианта, присваиваю путь к программе. И всегда получаю out_of_range.

Это сообщение отредактировал(а) Rutti - 26.3.2006, 16:17
PM MAIL   Вверх
_hunter
Дата 27.3.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



ну так код вызова показывай.
+ с какого перепуга ты строку как void* передаеш? может проще ( и логичнее ) как char*/wchar_t* передавать?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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