Re: Программно закрыть COM-порт | |
---|---|
ra3dct Сообщений: 468 Откуда: nr. Moscow Дата регистрации: 06.10.2003 |
Цитата:В Вашем случае НИКАК. Единственное что может быть поможет, это попытаться убить ту программу, которая его открыла. ------------------ Не в сети. VFP6 + SP5 |
Re: Программно закрыть COM-порт | |
---|---|
Flex0 |
Ты хендл порта знаешь ? Пусть даже из другого процесса ? Если знаешь , то я скажу как закрыть.
|
Re: Программно закрыть COM-порт | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi Flex0!
Не фоксовым же кодом ------------------ WBR, Igor |
Re: Программно закрыть COM-порт | |
---|---|
Flex0 |
Ну вообще-то хотел ему FLL-ку пихнуть Но можно и фоксовским с использованием Win32Api:
OpenProcess DuplicateHandle GetCurrentProcess GetCurrentProcessId CloseHandle Но лучьше всего, это просто зарубить процесс Правда горантии нет , что порт закроеться, особенно если процесс, просто запустил какой-нить поток из EXE сервера. Вот я читал, читал, так и не понял, а чаво это он не закрываеться-то ? Програмеры накосячили ? Так звонить надо разработчикам, пусть переделывают, что там у Вас DLL или OLE automation server. |
Re: Программно закрыть COM-порт | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi Flex0!
Хех, а права? Разве есть уверенность, что будет доступно право PROCESS_DUP_HANDLE? Да и вообще что произойдёт с процессом-жертвой, если даже и удастся "извне" прибить объект? IMHO скорее всего процесс просто упадёт... Тогда может лучше "по хорошему" его закрыть то - о чём и идёт постоянно речь Я кстати не уверен насчёт того, какие права нужны для срабатывания флага DUPLICATE_CLOSE_SOURCE - а без него дублирование хендла бессмысленно... ------------------ WBR, Igor |
Re: Программно закрыть COM-порт | |
---|---|
Flex0 |
Вот так:
HANDLE source_handle = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, source_pid); Тогда все доступно. Ну конечно, если настроенная админом политика безопасности не против. |
Re: Программно закрыть COM-порт | |
---|---|
Flex0 |
Кстати, Игорь, я не собирался убить объект внутри процесса , я собирался просто убить сам процесс. Жестоко, но уж если висит и занял порт, может поможет.
|
Re: Программно закрыть COM-порт | |
---|---|
Flex0 |
Вот так например :
Если уж нужно, чтобы деликатно с процессом, при условии что ты знаешь хотя бы как сам процесс называеться и знаешь хендл порта, то еще дополню. |
Re: Программно закрыть COM-порт | |
---|---|
Flex0 |
Забыл вложить библу, пардоньте
|
Re: Программно закрыть COM-порт | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi Flex0!
Да не, про TerminateProcess речь не идёт - это понятное решение хотя и весьма грубое Речь именно про то как закрыть ресурс, открытый в другом приложении, НЕ УБИВАЯ его... То что при "убиении" винда автоматом всё позакрывает - то понятно. ------------------ WBR, Igor |
Re: Программно закрыть COM-порт | |
---|---|
Flex0 |
Игорь, я же сказал, чтобы деликатно закрыть порт нужно знать хотя бы его хендл в этом процессе, все остальное дело техники, так скажем. И у меня есть решение, только хендла я не увидел и даже не услышал знает ли он его или нет
|
Re: Программно закрыть COM-порт | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi Flex0!
Думаю что он не знает "Решение" должно включать и поиск процесса (можно упростить - скажем процесс всегда один и имя его exe-ника известно), и "перечисление" всех хендлов в рамках этого процесса (понятия не имею как это делает тот-же Process Explorer, и подозреваю что без солидного багажа знаний в C++ и в части системного программирования тут никак), потом определить какой(ие) именно хендл(ы) должен стать "жертвой" - ну и наконец попытаться его убить - опять таки при этом никакой гарантии что программа не упадёт. ------------------ WBR, Igor |
© 2000-2024 Fox Club  |