Помощь - Поиск - Пользователи - Календарь
Полная версия: запуск bat файла
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Георгий
smile.gif пт volvo, думаю ты знаешь.
вобщем сделал пргу которая должна запускать bat-ник (он запускает паскаль, думаю ты помнишь), текст в батнике :

@echo off
TPC.exe -b start.pas > nul
del c:\tp7\bin\usesone.tpu
start.exe



текст запуска батника в делфи:


procedure TForm1.Button1Click(Sender: TObject);
var cmdline:string;
si: STARTUPINFO;
pi: PROCESS_INFORMATION;

begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
cmdline:='c:\tp7\bin\run2';
if not CreateProcess( nil,
PChar(cmdline),
nil,
nil,
False,
0,
nil,
nil,
si,
pi )
then
begin
Exit;
end;
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
end;



bat файл он запускает но вылазит ошибка "TPC.exe" не является внешней командой и все, хотя когда открываешь bat файл просто в винде все работает smile.gif
volvo
procedure RunAndWait(command: string);
var
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
begin
ZeroMemory(@si, sizeof(si));
si.cb := SizeOf(si);

if not CreateProcess(nil, PChar('"' + command + '"'), nil, nil,
False, CREATE_NO_WINDOW or NORMAL_PRIORITY_CLASS,
nil, PChar(ExtractFilePath(command)), si, pi)
then begin
ShowMessage('Error process creation'); Exit;
end;
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
RunAndWait('F:\Test\run2.bat');
end;

Это работает, если в BAT-файле все правильно, и прописаны верные пути. У тебя там творится какой-то бардак, если нужна помощь - говори, что в какой папке находится, где usesone.pas, где usestwo.pas, где graph.tpu и так далее, все tpu-файлы. И где находятся сами файлы tpc.exe и run2.bat ...

Цитата
хотя когда открываешь bat файл просто в винде все работает
Это тебе кажется... Попробуй удалить usesone.tpu и запустить BAT, увидишь, как оно "работает"...
TarasBer
А как там с рабочей папкой? В какой папке находится батник, в какой программа, вызывающая батник, в какой тэпэце?
Георгий
smile.gif нажимаю на button и повисает, ну вот что где находится:

C:\tp7\BIN\start.pas
C:\tp7\BIN\usesone.tpu
C:\tp7\BIN\BMP_PLUS.TPU
C:\tp7\BIN\CRT.TPU
C:\tp7\BIN\GRAPH.TPU
C:\tp7\BIN\run.bat
C:\tp7\BIN\START.EXE
C:\tp7\BIN\START.PAS
C:\tp7\BIN\TPC.EXE
C:\tp7\BIN\USESONE.PAS
C:\tp7\BIN\USESTWO.TPU
C:\tp7\BIN\USESA.TPU

еще есть C:\tp7\UNITS\ там куча TPU не знаю зачем они там типа дистриба шоли, но без этой папки все работает smile.gif

вот архив там весь паскаль и программ сама, там 2 файлика ("ввести график.exe" и "пострить график")
"ввести график.exe"
сюда вводится график, с нажатием в ней "построить график" изменяется ф-ия и после должен запускаться "C:\tp7\BIN\run.bat" там в корне лежит ярлык к нему для удобства сейчас.
ссылка на программу http://webfile.ru/2592456

кстате строит графики неявно выраженых ф-ий с очень большой скоростью, в инете таких прог не видел поэтому и написал ее, придумал оч сложный алгоритм smile.gif
volvo
Цитата
еще есть C:\tp7\UNITS\ там куча TPU не знаю зачем они там
Тебе все это напрочь не надо - оставь только вот эти файлы в рабочей папке (допустим, в C:\TP):

BMP_PLUS.TPU
GRAPH.TPU
EGAVGA.BGI
run2.bat
START.PAS
TPC.EXE
TURBO.TPL
usesone.PAS
USESTWO.TPU

Все остальные можешь убирать, для того, чтобы откомпилировать твой проект, они не нужны.

+

Измени BAT на такой:
@echo off
TPC.exe -B -U.. start.pas > nul
del usesone.tpu
start.exe

, и вызывай

procedure RunAndWait(command: string);
var
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
begin
ZeroMemory(@si, sizeof(si));
si.cb := SizeOf(si);

if not CreateProcess(nil, PChar('"' + command + '"'), nil, nil,
False, NORMAL_PRIORITY_CLASS, // <--- Внимание, БЕЗ Create_NO_WINDOW !!!
nil, PChar(ExtractFilePath(command)), si, pi)
then begin
ShowMessage('Error process creation'); Exit;
end;
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
RunAndWait('C:\TP\run2.bat');
end;

. Только что проверил - все прекрасно работает.

Но я еще подкорректировал сам файл START.PAS - никогда не привязывайся к абсолютным путям, третий параметр в InitGraph сделай пустой строкой, тогда EGAVGA.BGI будет искаться в текущей папке, и все заведется как надо...
Георгий
да деткааа, все работает!

спс volvo за огромную помощь в проекте! напишу в COPYRIGH про ваш портал словечко good.gif good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.