![]() |
|
#1
|
|||
|
|||
![]() Мне нужно написать программку для личного использования.
В папке C:\run в любой момент может появиться bat'ник который нужно оперативно обнаруживать и запускать. Планирую программу, которая по таймеру, каждую секунду или чаще проверяет папку на наличие файлов с расширением "*.bat". Если акие файлы обнаружены - запускает их, после чего удаляет "отработанный" батник. Отсюда ряд вопросов. 1). Сам допёр. 2). Сам допёр. 3). Допустим получили список файлов - запустили. Каждый батник работает около секунды. Как правильно удалять? Я так понимаю, что пока батник работает - его удалить нельзя? Т.е. нужно делать попытки удаления до успеха? Или отслеживать закрытие созданного батником окна? Или ещё как? Последний раз редактировалось MrDiG, 19.02.2011 в 22:50. |
#2
|
|||
|
|||
![]() А почему нельзя поставить таймер секунд на 5-10 (или столько, чтоб наверняка) и после удалять? Ведь батников не тысяча и занимают они не по гигу.
|
#3
|
|||
|
|||
![]() Просто пока я буду ждать эти десять секунд в папке может появиться ещё десяток батников. Придётся вести список отработанных. Хочется чёго-то понадёжнее.
Допустим вот намутил кусочек кода: Код:
procedure TForm15.Timer1Timer(Sender: TObject); var path:string; //путь к папке с батниками bat:string; //переменная для названия батников begin path:=Edit1.Text; ListBox1.Clear; ListFileDir(path, ListBox1.Items); if ListBox1.Items.Count > 0 then begin bat:=path+ListBox1.Items[0]; ShellExecute(0,'open',PChar(bat),nil,PChar(path),SW_SHOW); //Вот тут вот - я должен убедиться что cmd.exe не запущен //после чего удалить файл. //Если удаляю во время работы батника - он отрабатывает неправильно //Заголовок окна C:\Windows\system32\cmd.exe DeleteFile(bat); end; end; |
#4
|
|||
|
|||
![]() Запускать через createProcess и отслеживать handle. как только handle освобождается, значит работа закончена - можно удалять.
|