2009-10-05 4 views
1

Я хотел бы знать, открыт ли файл каким-либо процессом (включая вызывающего). Есть несколько предложений, уже опубликованных, которые, как правило, вращаются вокруг попытки открыть файл исключительно и ловить исключение.Как я могу получить набор открытых дескрипторов для всех процессов

В моем случае это не доказало свою эффективность. Я верю в свою конкретную ситуацию, с которой я могу справиться с проверкой имен всех открытых дескрипторов типа File всех запущенных процессов.

ответ

1

Я не думаю, что вы можете решить эту проблему просто с помощью .NET и P/Invoke. Вам нужно будет получить доступ к низкоуровневым функциям. Смотрите решение, отправленный AdaraCD в этой теме на другом форуме, который использует набор средств для разработки драйвера (DDK):

Enum HANDLEs for a process

1

Путь бедняка будет заключаться в том, чтобы shell to handle.exe из sysinternals. Я не знаю, может ли он быть распространен. он должен быть запущен как admin (я уверен, что вам нужны права администратора, чтобы делать то, что вы хотите в любом случае). в любом случае, если вы можете просто скопировать его и перенаправить вывод в файл или записать его stdout, тогда вам просто нужно проанализировать его вывод, чтобы получить то, что вы хотите. я сделал поиск в интернет-обратном пути, и он не кажется, что отметка r. когда-либо выпускал источник для своей утилиты.

это, очевидно, не является хорошим решением, если у вас есть приложение, которое вы распространяете, но если его просто в доме, возможно, это будет достаточно хорошо.

наилучших пожеланий, дон

0

Как я помню код Handle.exe есть открытые источники, так что вы можете использовать эту большую полезность в качестве ссылки.

Смежные вопросы