फाइल लॉक समस्या का परिचय
कभी-कभी जब आप Windows में किसी फाइल को हटाने, नाम बदलने या स्थानांतरित करने का प्रयास करते हैं, तो आपको एक संदेश दिखाई दे सकता है कि फाइल व्यस्त/लॉक/किसी अन्य प्रक्रिया द्वारा उपयोग की जा रही है। आमतौर पर उस प्रोग्राम का नाम जो फाइल को खुला रखता है, फाइल एक्सप्लोरर संदेश विंडो में दिखाया जाता है। फाइल को अनलॉक करने के लिए, प्रोग्राम को बंद करना पर्याप्त है। हालांकि, ऐसा हो सकता है कि कोई फाइल या लाइब्रेरी किसी अज्ञात या सिस्टम प्रक्रिया द्वारा उपयोग की जा रही है। फिर इसे अनलॉक करना कठिन होता है।
कई ऐप्स फाइलों को एक्सक्लूसिव मोड में खोलते हैं। साथ ही, फाइल को फाइल सिस्टम द्वारा लॉक किया जाता है जो अन्य ऐप्स और प्रक्रियाओं से इनपुट-आउटपुट ऑपरेशन को रोकता है। यदि आप ऐप को बंद करते हैं, तो फाइल लॉक जारी हो जाता है।
फाइल लॉक संदेश अलग हो सकता है। उदाहरण के लिए, निम्न स्क्रीनशॉट फाइल प्रकार और उससे जुड़े ऐप को दिखाता है:
File/Folder in Use. The action can’t be completed because the file is open in another program. Close the folder or file and try again.
तब आप आसानी से समझ सकते हैं कि किस ऐप ने फाइल को लॉक किया है और इसे बंद कर सकते हैं।
हालांकि, कभी-कभी आप एक अधिक दिलचस्प संदेश देख सकते हैं कि फाइल किसी अज्ञात या Windows सिस्टम प्रक्रिया द्वारा उपयोग की जा रही है। यह या तो एक Windows प्रक्रिया हो सकती है या सिस्टम विशेषाधिकारों के साथ काम करने वाली अन्य प्रक्रियाएं, जैसे एंटीवायरस ऐप, बैकअप एजेंट, MSSQL डेटाबेस, आदि:
The action can’t be completed because the file is open in SYSTEM. Close the file and try again.
आइए यह पता लगाने का प्रयास करें कि कौन सा प्रोग्राम, सेवा या Windows सिस्टम प्रक्रिया फाइल का उपयोग कर रही है, फाइल को कैसे अनलॉक करें और क्या इसे पैरेंट प्रक्रिया को बंद किए बिना जारी किया जा सकता है।
यदि आप किसी साझा नेटवर्क फोल्डर में फोल्डर को हटा नहीं सकते हैं, तो समस्या संभवतः thumbs.db से संबंधित है जिसमें फोल्डर में फाइलों का थंबनेल कैश होता है या फाइल आपके SMB फाइल सर्वर पर किसी अन्य उपयोगकर्ता द्वारा खोली (लॉक) गई है।
फाइल को अनलॉक करने का सबसे आसान तरीका उस प्रक्रिया को समाप्त करना है जिसने इसे लॉक किया है। लेकिन यह हमेशा संभव नहीं है, खासकर सर्वर पर।
फाइल को लॉक करने वाली प्रक्रिया को खोजने के लिए, अक्सर Unlocker टूल का उपयोग करने की सिफारिश की जाती है। मैं Unlocker का उपयोग नहीं करता क्योंकि यह फाइल को लॉक करने वाली प्रक्रिया या प्रक्रियाओं की श्रृंखला के बारे में विस्तृत जानकारी प्रदान नहीं करता है। न ही आप किसी प्रक्रिया द्वारा उपयोग की जा रही फाइल को अनलॉक कर सकते हैं - आपको ऐप को पूरी तरह से समाप्त करना होगा।
इसके अलावा, यह एक थर्ड-पार्टी टूल है, और इसे इंस्टॉल करते समय आपको बहुत सावधान रहना चाहिए, क्योंकि यह उन प्रोग्राम्स का एक पूरा बंडल इंस्टॉल करने का सुझाव देता है जिनकी आपको आवश्यकता नहीं है।
जब Windows में कोई प्रक्रिया फाइल खोलती है, तो इनपुट/आउटपुट स्ट्रीम को एक फाइल डिस्क्रिप्टर (हैंडल) असाइन किया जाता है। प्रक्रिया और इसकी चाइल्ड प्रक्रियाएं हैंडलर का उपयोग करके फाइल तक पहुंचती हैं। Windows API का उपयोग करके, आप अपने फाइल सिस्टम को फाइल हैंडल को मुक्त करने और फाइल को अनलॉक करने का सिग्नल भेज सकते हैं।
यदि आप फाइल हैंडल को जबरन बंद करते हैं, तो इसका परिणाम आपके ऐप या कंप्यूटर के अस्थिर काम में हो सकता है। यदि आप सुनिश्चित नहीं हैं कि ऐप के फाइल हैंडल को बंद करने के बाद क्या हो सकता है, तो इसे प्रोडक्शन सर्वर पर न करें जब तक कि आपने इसे पहले से टेस्ट न किया हो।
Process Explorer का उपयोग करके फाइल को अनलॉक कैसे करें?
ProcessExplorer एक मुफ्त टूल है जिसे आप Microsoft वेबसाइट से डाउनलोड कर सकते हैं (https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer)। आइए फाइल को लॉक करने वाली प्रक्रिया को खोजने और प्रक्रिया के फाइल हैंडल को रीसेट करके फाइल को मुक्त करने का प्रयास करें।
- ProcessExplorer इंस्टॉल करने की आवश्यकता नहीं है: बस डाउनलोड करें, निकालें और procexp.exe को व्यवस्थापक के रूप में चलाएं
- ढूंढें -> हैंडल या DLL ढूंढें चुनें (या
Ctrl-Fदबाएं) - उस फाइल का नाम निर्दिष्ट करें जिसे आप अनलॉक करना चाहते हैं और खोजें पर क्लिक करें
- वह फाइल चुनें जिसे आप चाहते हैं। फाइल को खोलने वाली प्रक्रिया प्रक्रिया ट्री में हाइलाइट होगी। इस पर राइट-क्लिक करें और प्रक्रिया को समाप्त करने के लिए प्रोसेस ट्री समाप्त करें चुनें। हालांकि, आप प्रक्रिया को समाप्त किए बिना फाइल हैंडल को बंद करने का प्रयास कर सकते हैं। आपके द्वारा खोजा गया फाइल हैंडल Process Explorer के निचले पैनल में स्वचालित रूप से हाइलाइट हो जाएगा। हैंडल पर राइट-क्लिक करें और हैंडल बंद करें चुनें। फाइल बंद करने की पुष्टि करें
यदि आपके Process Explorer में खुले प्रक्रिया हैंडल की सूची वाला निचला पैनल प्रदर्शित नहीं होता है, तो विकल्प View -> Lower Pane View -> Handles सक्षम करें।
तो आपने पैरेंट प्रक्रिया को समाप्त किए बिना फाइल हैंडल को बंद कर दिया है। फिर आप फाइल को हटा या नाम बदल सकते हैं।
Handle टूल का उपयोग करके फाइल हैंडल कैसे रिलीज़ करें?
Handle Sysinternals का एक और कमांड लाइन टूल है (आप इसे Microsoft वेबसाइट पर डाउनलोड कर सकते हैं: https://docs.microsoft.com/en-us/sysinternals/downloads/handle)। यह आपको अपनी फाइल को लॉक करने वाली प्रक्रिया को खोजने और हैंडल को मुक्त करके लॉक को रिलीज़ करने की अनुमति देता है।
- Handle आर्काइव डाउनलोड करें और निकालें
- कमांड प्रॉम्प्ट को व्यवस्थापक के रूप में खोलें और निम्न कमांड चलाएं:
handle64.exe > listproc.txt - यह कमांड खुले हैंडल की सूची को एक टेक्स्ट फाइल में सहेज देगा। आप उस डायरेक्टरी के लिए हैंडल प्रदर्शित कर सकते हैं जिसमें वह फाइल स्थित है जिसे आप बदलना चाहते हैं:
Handle64.exe -a "C:\Program Files\App"या विशिष्ट प्रक्रिया के लिए:handle64.exe -p excel.exe - किसी भी टेक्स्ट एडिटर में listproc.txt खोलें और उस लाइन को ढूंढें जिसमें लॉक की गई फाइल का नाम है। फाइल हैंडल ID (हेक्स फॉर्मेट में) कॉपी करें। फिर उस सेक्शन पर जाएं जहां हैंडल का मालिक प्रक्रिया दिखाई जाती है और उसका ID लिख लें। सबसे अधिक संभावना है कि सिस्टम के रूप में चलने वाली प्रक्रिया का PID 4 होगा। कुछ Windows सिस्टम प्रक्रियाओं के लिए, handle.exe निम्न संदेश देता है:
wininit.exe pid: 732 <unable to open process>। इसका मतलब है कि आप इन सिस्टम प्रक्रियाओं के बारे में कोई जानकारी नहीं प्राप्त कर सकते (यहां तक कि व्यवस्थापक के रूप में भी)। ऐसी प्रक्रियाओं द्वारा खोले गए फाइल हैंडल प्राप्त करने के लिए, cmd.exe को System के रूप में चलाएं और हैंडल की सूची फिर से प्राप्त करने का प्रयास करें - कमांड प्रॉम्प्ट पर वापस जाएं और उसके HandleID और ProcessID द्वारा फाइल हैंडल को रीसेट करें। कमांड का निम्न प्रारूप है:
handl64e.exe -c HandleID -p ProcessIDउदाहरण के लिए:handl64e.exe -c 18C -p 18800 - टूल आपसे प्रक्रिया के लिए फाइल बंद करने की पुष्टि करने के लिए कहेगा।
y->enterदबाकर पुष्टि करें
यदि सिस्टम फाइल को बंद करने पर सही ढंग से प्रतिक्रिया करता है, तो आप अपनी फाइल को प्रक्रिया या अपने सर्वर/कंप्यूटर को पुनरारंभ किए बिना अनलॉक कर देंगे।