2010-03-19 8 views
10

क्या नेट में एक तरीका है यह पता लगाने के लिए कि किस प्रक्रिया ने फ़ाइल को लॉक कर दिया है?फ़ाइल किस प्रक्रिया से बंद है?

संपादित करें: मैं ऐसा इसलिए कर रहा हूं क्योंकि मैं अपने उपयोगकर्ता को यह जानना चाहता हूं कि वे फ़ाइल को संशोधित/खोल नहीं सकते हैं, क्योंकि फिलहाल, एक और प्रोग्राम जिसका उपयोग वे कर रहे हैं (जैसे एक्सेल) खुला। उम्मीद है, यह मदद करता है।

+1

जानकारी बेकार होगी, क्योंकि जब तक आप इसके साथ कुछ करते हैं, तो यह अब सटीक नहीं हो सकता है। –

+7

वास्तव में जोश? आप इसके बारे में निश्चित रूप से ... – SpaceghostAli

+0

@ स्पेसघोस्टएली फ़ाइलें हमेशा अनिश्चित काल तक बंद कर दी जाती हैं, नहीं? –

उत्तर

6

इसका संक्षिप्त उत्तर नहीं है।

हालांकि, लंबा जवाब यह है कि विभिन्न एपीआई कॉल और डब्लूएमआई विधियां हैं जिनका उपयोग आप इस जानकारी को खोजने के लिए कर सकते हैं, लेकिन यह अपेक्षाकृत तेज़ और सरल नहीं होने की उम्मीद है।

यदि आप एपीआई कॉल का उपयोग करना चाहते हैं, तो NtQuerySystemInformation फ़ंक्शन को SYSTEM_PROCESS_INFORMATION पैरामीटर के साथ देखें। यह उन सुंदर "गैर-दस्तावेजी" तरीकों कि अद्भुत त्याग के साथ आता है में से एक है:

NtQuerySystemInformation जा बदल या Windows के भविष्य संस्करणों में उपलब्ध नहीं हो सकता है। अनुप्रयोग को इस विषय में सूचीबद्ध वैकल्पिक कार्यों का उपयोग करना चाहिए।

तो मैं डब्लूएमआई का उपयोग करने के पक्ष में से बचने का सुझाव दूंगा।

आप WMI Win32_Process कक्षा का उपयोग वर्तमान में मशीन पर चल रही सभी प्रक्रियाओं को गिनने के लिए कर सकते हैं, और उसके बाद प्रत्येक प्रक्रिया को तब तक संभाल लें जब तक कि आप जिस फ़ाइल को ढूंढ रहे हैं उसे प्राप्त न करें। दुर्भाग्यवश, "हे, कौन सी प्रक्रिया इस फाइल को लॉक कर रही है" जाने का कोई आसान तरीका नहीं है, यह केवल उस प्रक्रिया को खोजने के लिए आपको दूसरी तरफ काम करता है जब तक आप उस फ़ाइल को लॉक नहीं कर लेते जो आपकी रुचि रखते हैं।

मैं कोडप्रोजेक्ट पर How To: (Almost) Everything In WMI via C# Part 2: Processes शीर्षक पर एक अच्छा छोटा लेख अनुशंसा करता हूं। (यदि आप उस तरह की चीज पसंद करते हैं तो भाग 1 भी एक अच्छा पढ़ा जाता है)

0

ऐसा लगता है कि किसी को इस एक पता लगा है (और आप साथ ही कुछ फ्रेंच सीख सकें :))

http://www.axcis.com.au/bb/viewtopic.php?p=505

+0

प्रक्रिया द्वारा सक्रिय फाइलें हैं। वह इसके विपरीत खोज रहा है। –

+0

सच - यदि यह महत्वपूर्ण प्रदर्शन नहीं है, तो आप फ़ाइल की तलाश में सभी प्रक्रियाओं के आउटपुट को बढ़ा सकते हैं। – holtavolt

+0

जब मैंने नोवेल सर्वर के लिए ऐसा कुछ लागू किया था तो मुझे इसे पीछे की ओर करना था - फ़ाइल की तलाश में सबकुछ खोजना। –

1

खैर ... यह नहीं वास्तव में यह करने का एक तरीका है ... नेट लेकिन यह मानते हुए कि आप एक आसान उपयोगिता का उपयोग करना चाहते हैं, Handle from SysInternals देखें।

+2

मुझे लगता है कि इरविन यह पूछ रहा है कि इसे प्रोग्राम कैसे करें, मुझे नहीं लगता कि यह वास्तव में उसके साथ उसकी मदद करता है। –

+0

@ सिमोन वेल, तकनीकी रूप से, वह अपवाद को फंस सकता है और फिर प्रोग्राम को वर्तमान में फ़ाइल का उपयोग कर प्रक्रिया (एस) प्राप्त करने के लिए प्रोग्राम कमांड को इस कमांड लाइन टूल का आह्वान कर सकता है। आदर्श से दूर, हाँ, लेकिन संभव है! –

संबंधित मुद्दे