Главная страница
    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.041 c
15-1181638216
TUser
2007-06-12 12:50
2007.07.15
Чудище


15-1182248927
mmms
2007-06-19 14:28
2007.07.15
Как это будет на WSH(VBS)


3-1176717144
NOD
2007-04-16 13:52
2007.07.15
Не могу разобраться с адо


3-1176371776
Анна
2007-04-12 13:56
2007.07.15
Как обработать в приложении разрыв connect-a


2-1182266516
AlexanderMS
2007-06-19 19:21
2007.07.15
Сохранение настроек программы в её исполняемом файле.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский