|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Запуск пакетного файла (ShellExecute)
Есть пакетный(.bat) файл, который имеет такой вид:
Код:
"с:\abcd\abc.exe" -a ... -b ... "с:\abcd\abc.exe" -a ... -b ... ... пытаюсь так: Код:
ShellExecute(HInstance, 'open', PChar(FPEdit.Text), nil, nil, SW_SHOWNORMAL); // FPEdit.Text - содержит полный путь к файлу Код:
Папка, откуда была запущена программа>"с:\abcd\abc.exe" -a ... -b ... Системе не удается найти указанный путь Папка, откуда была запущена программа>"с:\abcd\abc.exe" -a ... -b ... Системе не удается найти указанный путь ... |
#2
|
|||
|
|||
"Hatchet" Harry, нет, код рабочий. Проверила на ping.exe =)))) Вот такой bat-ник.
Код:
"c:\windows\system32\ping.exe" -t 127.0.0.1 Так что скорее всего, дело не в программе, а в путях или еще в чём-то... Попробуйте для контроля тоже с ping.exe. Если не пройдет, то не знаю пока. |
#3
|
|||
|
|||
хм... да, действительно код рабочий! Ошибка была непосредственно в .bat файле, - был 1 параметр, который использовал папку без полного пути (т.е. папка искалась там, откуда запускалась программа, а не рядом с .bat файлом, где она была на самом деле). Следовательно нужно задать SetCurrentDir('папка .bat файла'); или использовать CreateProcess(...,CurrentDirectory,...);
|
#4
|
||||
|
||||
А попробуйте так:
Код:
ShellExecute(HInstance, 'open', PChar(FPEdit.Text), nil, PChar(ExtractFileDir(FPEdit.Text)), SW_SHOWNORMAL); // FPEdit.Text - содержит полный путь к файлу ой! не заметил последний ответ. ...сказал, и загрустил от бесспорной своей правоты Последний раз редактировалось 0nni, 01.04.2009 в 09:08. |
#5
|
|||
|
|||
Вот еще такой вопросик назрел, как можно отследить выполнение пакетного (.bat) файла подобного(первый пост) содержания. Например мне нужно убить этот файл, если он выпоняется. Но непосредственно сам .bat-файл не убьёшь, т.к. как только он запускается, написанные в нём команды построчно передаются процессу cmd.exe а сам .bat-файл в процессах не отображается(т.е. он как бы в память к cmd.exe подгружается). Следовательно нужно гасить cmd.exe. По имени процесса или по хендлу окна убивать не вариант, т.к. если, допустим в это же время выполняется какой-нить другой процесс cmd.exe то он тоже убьётся(имена и хэндлы окон у двух запущенных cmd.exe будут одинаковы). Как обнаружить именно нужный cmd.exe (выполнение которого вызвал .bat-файл)
Если нужно по имени процесса убить, то пользовал такую функцию: Код:
function KillTask(ExeFileName:string):integer; const PROCESS_TERMINATE=$0001; var Co:BOOL; FS:THandle; FP:TProcessEntry32; begin result:=0; FS:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); FP.dwSize:=Sizeof(FP); Co:=Process32First(FS,FP); while integer(Co) <> 0 do begin if ((UpperCase(ExtractFileName(FP.szExeFile))=UpperCase(ExeFileName)) or (UpperCase(FP.szExeFile)=UpperCase(ExeFileName))) then Result:=Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FP.th32ProcessID),0)); Co:=Process32Next(FS,FP); end; CloseHandle(FS); end; |
#6
|
||||
|
||||
В батник пропиши
Код:
title ЗАГОЛОВОК Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj Последний раз редактировалось PhoeniX, 03.04.2009 в 21:52. |