Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CreateProcess - чтож это такое

17K
05 декабря 2006 года
freddy_kruger
7 / / 09.07.2006
Здравствуйте Уважаемые,
Есть такая проблема: нужно из файла считать строку к примеру: CALC.EXE и создать соответствующий процесс чтобы создал новый процесс CALC.EXE.
Так в файле может быть куча куча таких строк. Написал такой код:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <Winbase.h>
using namespace std;

int main(int argc, char* argv[])
{
    if( argc==1 || argc>2 )
    {
        cout<<"You shoud usage: win_proc2.exe test.txt"<<endl;
        cout<<"Press any key to exit..."<<endl;
        char ch;
        ch = getchar();
        return -1;
    }

    FILE *f;
    f = fopen(argv[1],"rb");
    if( f == NULL )
    {
        cout<<"Error opening file: "<<argv[1]<<endl;
        cout<<"Press any key to exit..."<<endl;
        char ch;
        ch = getchar();
        return -1;
    }

    wchar_t *buffer = new wchar_t[1024];
    char *buf = new char[1024];
    //buf = "Calc.exe";

    while(1)
    {
        fgets(buf,1024,f);
        cout<<buf<<endl;
        buffer = (wchar_t*)buf;
        LPTSTR szCmdline = _tcsdup(buffer);
        cout<<szCmdline<<endl;
        if( feof(f) ) break;
        STARTUPINFO startupInfo;
        ZeroMemory(&startupInfo, sizeof(STARTUPINFO));
        startupInfo.cb=sizeof(startupInfo);
        PROCESS_INFORMATION processInfo;
        ZeroMemory(&processInfo, sizeof(processInfo));
       
        if( !CreateProcess( NULL,
                        szCmdline,
                        NULL,
                        NULL,
                        FALSE,
                        NORMAL_PRIORITY_CLASS,
                        NULL,NULL,
                        &startupInfo,
                        &processInfo) )
        {
            printf("Error creating process: %d\nPress any key to exit...",GetLastError());
            char ch = getchar();
            return -1;
        }    
        printf("Process successfully created!\n");
        CloseHandle(&processInfo.hProcess);
    }  
       
    delete []buf;
    delete []buffer;
    printf("End of program\nPress any key to exit...");
    char ch = getchar();       
    return 0;                    
}

НОООООО, как бы я не изгалялся ПРОЦЕСС не запускается, Проблема со вторым параметром. Пытался запихать всё в первый параметр - в итоге ОДНИ И ТЕЖЕ МТСы только в профиль :(
прога запускается из командной строки командой к примеру: prog1.exe c:\test.txt
В text.txt записаны по строчно 2 команды CALC.EXE и NOTEPAD.EXE
Подскажите как правильно запускать CreateProcess чтобы он проглатил номрмально эту входную информацию!
Програмлю в VS2005.
547
06 декабря 2006 года
Hydra
488 / / 20.06.2006
Ты вообще MSDN по CreateProcess читать пробовал?
Или на худой конец поиск по форуму есть...
У CreateProcess первый параметр - путь и имя запускаемого файла, а второй - строка параметров. Ты ему в качестве экзешника NULL втыкаешь - я бы на месте CreateProcess сильно обиделся.
398
06 декабря 2006 года
Alexandoros
630 / / 21.10.2005
buffer = (wchar_t*)buf;
Это что такое? Проект какой юникод? мультибайт????

freddy_kruger Что возвращает гетластеррор мы угадать должны?????

Hydra - иди читай мсдн. Потом второй раз. А потом третий.
5.9K
06 декабря 2006 года
Zushenskiy
161 / / 29.06.2006
Цитата:

Ты вообще MSDN по CreateProcess читать пробовал?
Или на худой конец поиск по форуму есть...
У CreateProcess первый параметр - путь и имя запускаемого файла, а второй - строка параметров. Ты ему в качестве экзешника NULL втыкаешь - я бы на месте CreateProcess сильно обиделся.



передавать вторым параметром "имя_екзешника параметры" считаеться хорошим тоном запуска процесса а первый параметр обычно не используют. да и глюков меньше при использовании только второго параметра

а ошибка в :

Цитата:

buffer = (wchar_t*)buf;


Нужно использовать фунцию MultiButeToWideChar если тебе нужно перегнать мультибайт в юникод

547
07 декабря 2006 года
Hydra
488 / / 20.06.2006
Цитата:

Hydra - иди читай мсдн. Потом второй раз. А потом третий.


млин, sorry 2all. пошел читать матчасть. :(
со второго раза помогло :)

398
07 декабря 2006 года
Alexandoros
630 / / 21.10.2005
Цитата: Hydra

со второго раза помогло :)


:D:D:D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог