Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.045 c
6-1165509778
kernel
2006-12-07 19:42
2007.07.15
IdIcmpClient&amp;exception


3-1176451351
Jeeb
2007-04-13 12:02
2007.07.15
Поис (без учитывания знаков и символов)


3-1176758005
sergeii
2007-04-17 01:13
2007.07.15
SELECT с групировкой


2-1182171179
Ral'f
2007-06-18 16:52
2007.07.15
при заполнении DBGrid ширина (сумма) всех колонок = ширине формы


15-1181641061
OOO @Delphi
2007-06-12 13:37
2007.07.15
Где достать (скачать т.е.) FrontPage 2003?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский