|
Найти Handle в системе
|
|||
---|---|---|---|
#18+
Здравствуйте. Опишу свою задачу: Есть железка. При подключении она возвращает handle(типа IntPtr). Если работу программы завершить некорректно, не освободить ресурсы железки, то при повторной попытке подключиться она уже реагировать не будет. Есть мысль, что этот handle остается в системе. И железка висит. Ну и вопрос. Можно ли, зная этот указатель на железку, как-то найти ее в системе? И параллельный вопрос. Может ли винда очищать временно неиспользуемые хендлы? А то бывало, что железка работает, потом какое-то время(несколько минут) не используется, после чего уже не реагирует. Почему хендлы? Потому что вся работа с железкой ведется через этот указатель, полученный при подключении. (все через SDK от производителя). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 09:10 |
|
Найти Handle в системе
|
|||
---|---|---|---|
#18+
железка handle не возвращает. Описано поведение кривого драйвера и SDK ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 09:26 |
|
Найти Handle в системе
|
|||
---|---|---|---|
#18+
Sky Dragon, винда автоматически освобождает все дескрипторы открытые процессом при его завершении так что значение handle будет бесполезным после этого. Я бы постарался сначала решить эту проблему на уровне программы. Попробуй обернуть дескриптор устройства в SafeHandle , если ты еще этого не делаешь. Если не поможет, то можно вынести код общения с устройством в отдельный процесс и общаться с ним через WCF. В качестве бредовой идеи можно попробовать перезапускать драйвер устройства. На stackoverflow есть пример - How can I manually load/unload a driver in Windows Vista? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 09:38 |
|
Найти Handle в системе
|
|||
---|---|---|---|
#18+
Изопропил, ок. Возвращает не железка, а метод подключения к железки, который работает с драйвером, а возможно, со службой, которая работает с драйвером. Про кривое - не спорю. Но что есть, то есть... Китайцы ж :) bazile, про SafeHandler посмотрю. Но все же... получается, что на каком-то уровне железка думает, что с ней работают, а на самом деле уже нет. Применение WCF ничего не поменяет. Вся логика работы с железкой туда перетечет. Но так же и дальше будет глюкать... А до уровня драйверов спускаться бы не хотелось.. Проще перетыкать сканер в порт :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 10:08 |
|
Найти Handle в системе
|
|||
---|---|---|---|
#18+
Sky Dragon Проще перетыкать сканер в порт :) уже чуть больше информации. Кстати, глючить может и сама железка ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 10:53 |
|
Найти Handle в системе
|
|||
---|---|---|---|
#18+
Изопропил, скорее дрова. Сами железки и разных партий пробовали. Одна фигня. Помимо физического переподключения в порт помогает удаление и повторная установка устройства. Ну собственно что и предложил Базиль. Короче где-то висят какие-то ресурсы железки в системе... И вот кроме как хендла, полученного при первом подключении, больше ничего нет. Но видимо хендл не влияет на это. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 11:02 |
|
Найти Handle в системе
|
|||
---|---|---|---|
#18+
Sky Dragon, хендл, может и не удаляться при закрытии приложения, если ядро делит его с другим процессом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 11:31 |
|
Найти Handle в системе
|
|||
---|---|---|---|
#18+
имхо надо читать более подробно доки, есть ли они? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2014, 11:32 |
|
|
start [/forum/topic.php?fid=20&msg=38679452&tid=1402774]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 327ms |
total: | 466ms |
0 / 0 |