![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Георгий |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: ![]() ![]() ![]() |
![]() вобщем сделал пргу которая должна запускать bat-ник (он запускает паскаль, думаю ты помнишь), текст в батнике :
текст запуска батника в делфи:
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 файл просто в винде все работает ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
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 |
![]()
Сообщение
#3
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
А как там с рабочей папкой? В какой папке находится батник, в какой программа, вызывающая батник, в какой тэпэце?
-------------------- |
Георгий |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: ![]() ![]() ![]() |
![]() 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 не знаю зачем они там типа дистриба шоли, но без этой папки все работает ![]() вот архив там весь паскаль и программ сама, там 2 файлика ("ввести график.exe" и "пострить график") "ввести график.exe" сюда вводится график, с нажатием в ней "построить график" изменяется ф-ия и после должен запускаться "C:\tp7\BIN\run.bat" там в корне лежит ярлык к нему для удобства сейчас. ссылка на программу http://webfile.ru/2592456 кстате строит графики неявно выраженых ф-ий с очень большой скоростью, в инете таких прог не видел поэтому и написал ее, придумал оч сложный алгоритм ![]() |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата еще есть 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 , и вызывай 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 будет искаться в текущей папке, и все заведется как надо... |
Георгий |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 36 Пол: Мужской Реальное имя: Георгий Репутация: ![]() ![]() ![]() |
да деткааа, все работает!
спс volvo за огромную помощь в проекте! напишу в COPYRIGH про ваш портал словечко ![]() ![]() |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 21:54 |