for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
   :: Помощь сайту :: 

Re: Программно закрыть COM-порт
ra3dct

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




------------------
Не в сети. VFP6 + SP5
Ratings: 0 negative/0 positive

Re: Программно закрыть COM-порт
Flex0
Гость
Автор
Дата: 20.09.05 14:35:09ОтветитьЦитировать
Ты хендл порта знаешь ? Пусть даже из другого процесса ? Если знаешь , то я скажу как закрыть.
Ratings: 0 negative/0 positive

Re: Программно закрыть COM-порт
Igor Korolyov

Сообщений: 31349
Дата: 20.09.05 14:59:55ОтветитьЦитировать
Hi Flex0!

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




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

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

Re: Программно закрыть COM-порт
Igor Korolyov

Сообщений: 31349
Дата: 20.09.05 15:46:39ОтветитьЦитировать
Hi Flex0!

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




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

Re: Программно закрыть COM-порт
Flex0
Гость
Автор
Дата: 20.09.05 16:04:19ОтветитьЦитировать
Вот так:
HANDLE source_handle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, source_pid);
Тогда все доступно. Ну конечно, если настроенная админом политика безопасности не против.
Ratings: 0 negative/0 positive

Re: Программно закрыть COM-порт
Flex0
Гость
Автор
Дата: 20.09.05 17:06:14ОтветитьЦитировать
Кстати, Игорь, я не собирался убить объект внутри процесса , я собирался просто убить сам процесс. Жестоко, но уж если висит и занял порт, может поможет.
Ratings: 0 negative/0 positive

Re: Программно закрыть COM-порт
Flex0
Гость
Автор
Дата: 20.09.05 19:43:43ОтветитьЦитировать
Вот так например :
  
  #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
Гость
Автор
Дата: 20.09.05 21:36:32ОтветитьЦитировать
Забыл вложить библу, пардоньте
Ratings: 0 negative/0 positive


Вложения:
[vfp.zip (4.1KB)]  

Re: Программно закрыть COM-порт
Igor Korolyov

Сообщений: 31349
Дата: 21.09.05 14:43:41ОтветитьЦитировать
Hi Flex0!

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




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

Re: Программно закрыть COM-порт
Flex0
Гость
Автор
Дата: 22.09.05 10:44:53ОтветитьЦитировать
Игорь, я же сказал, чтобы деликатно закрыть порт нужно знать хотя бы его хендл в этом процессе, все остальное дело техники, так скажем. И у меня есть решение, только хендла я не увидел и даже не услышал знает ли он его или нет
Ratings: 0 negative/0 positive

Re: Программно закрыть COM-порт
Igor Korolyov

Сообщений: 31349
Дата: 22.09.05 13:50:26ОтветитьЦитировать
Hi Flex0!

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




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



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

On-line: 49 and Guests: 49


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