:: Visual Foxpro, Foxpro for DOS
Re: Программно закрыть COM-порт
ra3dct

Сообщений: 468
Откуда: nr. Moscow
Дата регистрации: 06.10.2003
Цитата:
РЕБЯТА!
Мне нужно лишь всего: КАК ЗАКРЫТЬ COM-ПОРТ из Фокса
В Вашем случае НИКАК. Единственное что может быть поможет,
это попытаться убить ту программу, которая его открыла.




------------------
Не в сети. VFP6 + SP5
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Flex0
Ты хендл порта знаешь ? Пусть даже из другого процесса ? Если знаешь , то я скажу как закрыть.
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Flex0!

Не фоксовым же кодом




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Flex0
Ну вообще-то хотел ему FLL-ку пихнуть Но можно и фоксовским с использованием Win32Api:
OpenProcess
DuplicateHandle
GetCurrentProcess
GetCurrentProcessId
CloseHandle
Но лучьше всего, это просто зарубить процесс Правда горантии нет , что порт закроеться, особенно если процесс, просто запустил какой-нить поток из EXE сервера.
Вот я читал, читал, так и не понял, а чаво это он не закрываеться-то ? Програмеры накосячили ? Так звонить надо разработчикам, пусть переделывают, что там у Вас DLL или OLE automation server.
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Flex0!

Хех, а права? Разве есть уверенность, что будет доступно право
PROCESS_DUP_HANDLE? Да и вообще что произойдёт с процессом-жертвой, если
даже и удастся "извне" прибить объект? IMHO скорее всего процесс просто
упадёт... Тогда может лучше "по хорошему" его закрыть то - о чём и идёт
постоянно речь
Я кстати не уверен насчёт того, какие права нужны для срабатывания флага
DUPLICATE_CLOSE_SOURCE - а без него дублирование хендла бессмысленно...




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Flex0
Вот так:
HANDLE source_handle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, source_pid);
Тогда все доступно. Ну конечно, если настроенная админом политика безопасности не против.
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Flex0
Кстати, Игорь, я не собирался убить объект внутри процесса , я собирался просто убить сам процесс. Жестоко, но уж если висит и занял порт, может поможет.
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Flex0
Вот так например :
#define ERR_KILL_PROC_BAD 0
#define ERR_KILL_PROC_OK 1
SET LIBRARY TO vfp.fll additi
? KillP("calc.exe")
Убивает наповал
Если уж нужно, чтобы деликатно с процессом, при условии что ты знаешь хотя бы как сам процесс называеться и
знаешь хендл порта, то еще дополню.
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Flex0
Забыл вложить библу, пардоньте
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Flex0!

Да не, про TerminateProcess речь не идёт - это понятное решение хотя и
весьма грубое
Речь именно про то как закрыть ресурс, открытый в другом приложении, НЕ
УБИВАЯ его... То что при "убиении" винда автоматом всё позакрывает - то
понятно.




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Flex0
Игорь, я же сказал, чтобы деликатно закрыть порт нужно знать хотя бы его хендл в этом процессе, все остальное дело техники, так скажем. И у меня есть решение, только хендла я не увидел и даже не услышал знает ли он его или нет
Ratings: 0 negative/0 positive
Re: Программно закрыть COM-порт
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Flex0!

Думаю что он не знает
"Решение" должно включать и поиск процесса (можно упростить - скажем процесс
всегда один и имя его exe-ника известно), и "перечисление" всех хендлов в
рамках этого процесса (понятия не имею как это делает тот-же Process
Explorer, и подозреваю что без солидного багажа знаний в C++ и в части
системного программирования тут никак), потом определить какой(ие) именно
хендл(ы) должен стать "жертвой" - ну и наконец попытаться его убить - опять
таки при этом никакой гарантии что программа не упадёт.




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 33 Равиль  (Гостей: 32)

© 2000-2024 Fox Club 
Яндекс.Метрика