Вниз
Скачать: CL | DM;

Запуск и завершение программы принудительно.   Найти похожие ветки 

← →
()utLaw ©   (2002-10-20 00:00) [0]

Собственно, надо реализовать сабж. Т.е. запустить прогу и, если она за нужное ремя не завершилась, то скинуть ее.
Плз, пишите мне на мыло.


← →
Rouse_ ©   (2002-10-20 00:05) [1]

Ну посмотри ты в FAQ, там все по полочкам разложено

Желаю успехов


← →
Aleks1   (2002-10-20 04:11) [2]

Честно говоря общий ответ на сабж, действительно есть в FAQ причем не один раз. Но, имхо, если привести подробности задачи, то ответ может быть гораздо лучше по всем параметрам.


← →
Rouse_ ©   (2002-10-20 05:36) [3]

Да не вопрос, ответ то дать можно, но почему бы и не посмотреть в факе?

Вот примерный алгоритм действий

procedure Demo_Start_Kill_Proc;
var
H:HWND;
dwPID: integer;
hProc: THandle;
begin
//Запускаем
h:= ShellExecute(Handle,"open",PChar(Расположение программы),PChar(Параметры),PChar(Рабочая директория),SW_NORMAL);
//Ждем
Sleep(Время ожидания);
//Убиваем программу
if GetWindowThreadProcessId(H, @dwPID)<>0 then
hProc := OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwPID);
if hProc <> 0 then
TerminateProcess(hProc, 0);
end;


Желаю успехов


← →
andrey_pst ©   (2002-10-20 08:27) [4]

Разрешите еще вопрос:
TerminateProcess выгружает dll, использующиеся "убиваемой" программой ?


← →
Rouse_ ©   (2002-10-20 09:35) [5]

Нет, для этого лучше WM_QUIT

Желаю успехов


← →
()utLaw ©   (2002-10-20 10:51) [6]

А если прога запускается ДОСовская?


← →
Rouse_ ©   (2002-10-20 10:55) [7]

Тогда первый вариант кода

Желаю успехов


← →
()utLaw ©   (2002-10-21 09:12) [8]

Я сделал так:

(************ Server.dpr ************)
program Server;

uses
Forms,
ServerMain in "ServerMain.pas" {ServerForm};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TServerForm, ServerForm);
Application.Run;
end.
(************ ServerMain.pas ************)
unit ServerMain;

interface

uses
// Messages, SysUtils, Graphics, Dialogs, StdCtrls,
Classes, Controls, StdCtrls,
Forms, Windows, ShellAPI;

type
TServerForm = class(TForm)
bRun: TButton;
procedure bRunClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
ServerForm: TServerForm;

implementation

{$R *.DFM}

procedure TServerForm.bRunClick(Sender: TObject);
var
H:HWND;
dwPID: integer;
hProc: THandle;
begin
//Запускаем
h:= ShellExecute(Handle,"open",PChar("d:\Мои документы\Projects\Progs\Tester\TST.exe"),PChar(""{Параметры}),PChar("d:\Мои документы\Projects\Progs\Tester\"{Рабочая директория}),SW_NORMAL);
//Ждем
Sleep(3000{Время ожидания});
//Убиваем программу
if GetWindowThreadProcessId(H, @dwPID)<>0 then
hProc := OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwPID);
if hProc <> 0 then
TerminateProcess(hProc, 0);
end;

end.
(************ TST.PAS ************)
{Компилировано TurboPascal"ем}
begin
readln;
end.

но... Программа TST не завершается.... Что делать?

Программа должна тестировать олимпиадные задачи. Там есть лимит по времени, т.е. по прошествии N секунд задача убивается (если сама не завершилась) и выдается сообщение о непрохождении по времени. Иначе происходит анализ результатов.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.008 c
8-101392
Alexfdfdfd
2002-06-27 01:30
2002.10.31
Народ , чё такое данные в формате dib


1-101248
Дядя Джонсон
2002-10-17 23:00
2002.10.31
Как перейти в самый верх memo?


3-101059
Sago
2002-10-07 05:58
2002.10.31
Базу в ресурсы


1-101363
som
2002-10-21 11:12
2002.10.31
Excel и Delphi


1-101289
Weare
2002-10-22 10:43
2002.10.31
Необходимо конструктивное решение




   Наверх