Форум: "Прочее";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
ВнизКак из экзешника запустить батник? Найти похожие ветки
← →
Сатир (2007-06-16 12:45) [0]сабж.
Что лучше CreateProcess или ShellExecute?
Если несложно, приведите, плиз, пример с параметрами, например для запуска 1.bat
Заранее благодарен
← →
Сатир (2007-06-16 12:58) [1]Вот нашёл, но что-то сильно громоздко
Procedure RunAndStdoutToStrings(CommandLine: string; Str: TStrings);
var
tRead, cWrite, dwAvail: cardinal;
SA: TSecurityAttributes;
PI: TProcessInformation;
SI: TStartupInfo;
sBuff: THandleStream;
StringBuf: TStringList;
ret : Cardinal;
m : TMemoryStream;
fla : boolean;
begin
//Инициализация
SA.nLength:=SizeOf(SECURITY_ATTRIBUTES);
SA.bInheritHandle:=True;
SA.lpSecurityDescriptor:=nil;
if not CreatePipe(tRead, cWrite, @SA, 0) then Exit;
ZeroMemory(@SI, SizeOf(TStartupInfo));
SI.cb:=SizeOf(TStartupInfo);
SI.dwFlags:=STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
SI.wShowWindow:=SW_HIDE;
SI.hStdOutput:=cWrite;
//Стартуем процесс...
if CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, nil, SI, PI)
then begin
Str.Clear();
sBuff := THandleStream.Create(tRead);
StringBuf := TStringList.Create();
m := TMemoryStream.Create;
repeat
//Ждем N-дцать минут
Ret := WaitForSingleObject(PI.hProcess, 100);
StringBuf.Clear();
if sBuff.Size > 0 then
begin
fla := (m.Size > 0) and not (PByteArray(m.Memory)^[m.Size - 1] in [13, 10]);
m.Size := 0;
m.LoadFromStream(sBuff);
m.Position := 0;
StringBuf.LoadFromStream(m); //Помещаем блок в буфер
if StringBuf.Count > 0 then
begin
//Склеиваем разорванную строку
if (Str.Count > 0) and fla then
begin
StringBuf.Strings[0] := Str.Strings[Str.Count-1]+StringBuf.Strings[0];
Str.Delete(Str.Count-1);
end;
end;
//Добавляем блок из буфера
Str.AddStrings(StringBuf);
end;
//не пуст ли pipe ?
//PeekNamedPipe(tRead, nil, 0, nil, @dwAvail, nil);
until (Ret <> WAIT_TIMEOUT);
m.Free;
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end; // if CreateProcess
CloseHandle(tRead);
CloseHandle(cWrite);
end;
← →
Anatoly Podgoretsky © (2007-06-16 13:03) [2]> Сатир (16.06.2007 12:58:01) [1]
Работает?
← →
Сатир (2007-06-16 13:06) [3]
> Работает?
>
ну, я не всё взял, только до If CreateProcess и вместо CommandLine подставил "1.bat" , но вроде не сработало
← →
Правильный Вася (2007-06-16 13:10) [4]winexec
← →
Сатир (2007-06-16 13:11) [5]
> но вроде не сработало
нужно было указать полный путь к батнику
теперь работает
← →
Правильный Вася (2007-06-16 13:11) [6]не забудь в комендной строке cmd.exe /P
← →
Германн © (2007-06-16 13:13) [7]
> ну, я не всё взял, только до If CreateProcess и вместо CommandLine
> подставил "1.bat" , но вроде не сработало
>
А что мешает воспользоваться местным ЧАВО? И найти там более простой пример использования CreateProcess?
← →
Gero © (2007-06-16 13:17) [8]ShellExecute
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c