Có bất kỳ điều gì trong API Windows C++ để cung cấp cho tôi danh sách các quy trình có xử lý cho một tệp nhất định không?cách tìm quy trình có xử lý trên tệp từ tên tệp
Trả lời
Bài viết này giải thích nó khá tốt. Nó sử dụng NtQuerySystemInformation để có được các xử lý.
http://msdn.microsoft.com/en-us/library/ms724509(VS.85).aspx
Từ blog của Microsoft: How do I find out which process has a file open?
Nhập Restart Manager.
Mục tiêu chính thức của Trình quản lý khởi động lại là giúp bạn có thể tắt và khởi động lại ứng dụng đang sử dụng tệp bạn muốn cập nhật. Để làm được điều đó, nó cần phải theo dõi quá trình nào đang nắm giữ các tham chiếu đến các tệp nào. Và đó là cơ sở dữ liệu được sử dụng ở đây. (Tại sao hạt nhân theo dõi quá trình nào có một tập tin mở? Bởi vì đó là trò chuyện của nguyên tắc không theo dõi thông tin bạn không cần: Bây giờ nó cần thông tin!)
Đây là một chương trình đơn giản lấy tên tệp trên dòng lệnh và hiển thị các quy trình nào có tệp đang mở.
#include <windows.h> #include <RestartManager.h> #include <stdio.h> int __cdecl wmain(int argc, WCHAR **argv) { DWORD dwSession; WCHAR szSessionKey[CCH_RM_SESSION_KEY+1] = { 0 }; DWORD dwError = RmStartSession(&dwSession, 0, szSessionKey); wprintf(L"RmStartSession returned %d\n", dwError); if (dwError == ERROR_SUCCESS) { PCWSTR pszFile = argv[1]; dwError = RmRegisterResources(dwSession, 1, &pszFile, 0, NULL, 0, NULL); wprintf(L"RmRegisterResources(%ls) returned %d\n", pszFile, dwError); if (dwError == ERROR_SUCCESS) { DWORD dwReason; UINT i; UINT nProcInfoNeeded; UINT nProcInfo = 10; RM_PROCESS_INFO rgpi[10]; dwError = RmGetList(dwSession, &nProcInfoNeeded, &nProcInfo, rgpi, &dwReason); wprintf(L"RmGetList returned %d\n", dwError); if (dwError == ERROR_SUCCESS) { wprintf(L"RmGetList returned %d infos (%d needed)\n", nProcInfo, nProcInfoNeeded); for (i = 0; i < nProcInfo; i++) { wprintf(L"%d.ApplicationType = %d\n", i, rgpi[i].ApplicationType); wprintf(L"%d.strAppName = %ls\n", i, rgpi[i].strAppName); wprintf(L"%d.Process.dwProcessId = %d\n", i, rgpi[i].Process.dwProcessId); HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, rgpi[i].Process.dwProcessId); if (hProcess) { FILETIME ftCreate, ftExit, ftKernel, ftUser; if (GetProcessTimes(hProcess, &ftCreate, &ftExit, &ftKernel, &ftUser) && CompareFileTime(&rgpi[i].Process.ProcessStartTime, &ftCreate) == 0) { WCHAR sz[MAX_PATH]; DWORD cch = MAX_PATH; if (QueryFullProcessImageNameW(hProcess, 0, sz, &cch) && cch <= MAX_PATH) { wprintf(L" = %ls\n", sz); } } CloseHandle(hProcess); } } } } RmEndSession(dwSession); } return 0; }
- 1. Lấy tên quy trình từ pid hoặc xử lý
- 2. Trình xử lý PDF: tên tệp nội dung bố trí
- 3. tệp trên nhiều quy trình
- 4. Chỉ có thể tìm tệp dựa trên tên tệp không?
- 5. Trình xem web trên Android, trình xử lý tệp đầu vào của tệp không hiển thị
- 6. Tìm hiểu quy trình nào có khóa độc quyền trên thiết bị USB xử lý
- 7. Xử lý tên tệp ảnh chụp nhanh có nhân bản
- 8. Câu hỏi về quy trình làm việc Mercurial (cách xử lý các tệp Config)
- 9. Làm cách nào để có danh sách các xử lý tệp đang mở theo quy trình trong C#?
- 10. Các tệp xử lý theo lô đệ quy với pngquant
- 11. Nhận quy trình đang chạy xử lý được xử lý
- 12. Tìm nhiều tệp đệ quy và đổi tên trong linux
- 13. Git - xử lý tên tệp mã hóa hỗn hợp
- 14. Cách xử lý ký tự Châu Á trong tên tệp trong Git trên OS X
- 15. Cách xử lý đúng cách xử lý các quy trình con
- 16. cách xử lý tệp .mdb với python
- 17. Làm cách nào để tìm tệp xử lý quá trình của tôi đã mở trong Linux?
- 18. Giết một số quy trình theo tên tệp .exe
- 19. Tìm tên tệp từ đường dẫn tệp đầy đủ
- 20. C++ WinAPI: xử lý đường dẫn/tên tệp dài
- 21. Xử lý lỗi khi getimagesize không thể tìm thấy tệp
- 22. tệp tìm kiếm linux dựa trên mẫu tên tệp
- 23. xử lý nhiều tệp tạm thời nhỏ
- 24. Cách xử lý hết tệp khi đọc tệp xml
- 25. GWT: Cách trả về (và xử lý) lỗi từ biểu mẫu nhiều tệp (tệp) tải lên
- 26. Cách xử lý ~ trong đường dẫn tệp
- 27. Tìm kiếm tệp đệ quy
- 28. xử lý tên tệp * tham số với dấu cách thông qua kết quả RFC 5987 trong '+' trong tên tệp
- 29. Win32API - Làm thế nào để có được tên tập tin của quá trình từ xử lý quá trình?
- 30. Không có quy tắc xử lý tệp cho kiến trúc armv6
Nghiên cứu của bạn trong tài liệu được tiết lộ cho đến thời điểm này? –
Trong linux có fuser cho việc này. Rõ ràng các cửa sổ tương đương được gọi là Xử lý (được tìm thấy chỉ bởi searning windows fuser). Đó là một lệnh không phải là lệnh gọi api, nhưng có thể giúp tìm kiếm của bạn – frankc
ý tưởng duy nhất tôi có bây giờ là gọi handle.exe với tên tệp và điều đó sẽ cho tôi biết chi tiết. Tôi không muốn bắt đầu một quá trình cho điều này nếu có một api hiện có mà thực hiện điều này. –