#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;
}
CreateProcess - чтож это такое
Есть такая проблема: нужно из файла считать строку к примеру: CALC.EXE и создать соответствующий процесс чтобы создал новый процесс CALC.EXE.
Так в файле может быть куча куча таких строк. Написал такой код:
Код:
НОООООО, как бы я не изгалялся ПРОЦЕСС не запускается, Проблема со вторым параметром. Пытался запихать всё в первый параметр - в итоге ОДНИ И ТЕЖЕ МТСы только в профиль :(
прога запускается из командной строки командой к примеру: prog1.exe c:\test.txt
В text.txt записаны по строчно 2 команды CALC.EXE и NOTEPAD.EXE
Подскажите как правильно запускать CreateProcess чтобы он проглатил номрмально эту входную информацию!
Програмлю в VS2005.
Или на худой конец поиск по форуму есть...
У CreateProcess первый параметр - путь и имя запускаемого файла, а второй - строка параметров. Ты ему в качестве экзешника NULL втыкаешь - я бы на месте CreateProcess сильно обиделся.
Это что такое? Проект какой юникод? мультибайт????
freddy_kruger Что возвращает гетластеррор мы угадать должны?????
Hydra - иди читай мсдн. Потом второй раз. А потом третий.
Цитата:
Ты вообще MSDN по CreateProcess читать пробовал?
Или на худой конец поиск по форуму есть...
У CreateProcess первый параметр - путь и имя запускаемого файла, а второй - строка параметров. Ты ему в качестве экзешника NULL втыкаешь - я бы на месте CreateProcess сильно обиделся.
передавать вторым параметром "имя_екзешника параметры" считаеться хорошим тоном запуска процесса а первый параметр обычно не используют. да и глюков меньше при использовании только второго параметра
а ошибка в :
Цитата:
buffer = (wchar_t*)buf;
Нужно использовать фунцию MultiButeToWideChar если тебе нужно перегнать мультибайт в юникод
Цитата:
Hydra - иди читай мсдн. Потом второй раз. А потом третий.
млин, sorry 2all. пошел читать матчасть. :(
со второго раза помогло :)
Цитата: Hydra
со второго раза помогло :)
:D:D:D