मैं एक चल रहे निष्पादन योग्य का नाम क्यों बदल सकता हूं, लेकिन इसे हटा नहीं सकता?


12

सब कुछ शीर्षक में है, लेकिन अधिक आधिकारिक तौर पर:

विंडोज मुझे एक चल रहे निष्पादन योग्य का नाम क्यों देता है, लेकिन इसे हटाएं नहीं?

जवाबों:


12

वास्तव में फ़ाइल का नाम बदलने जैसी कोई बात नहीं है। एक फ़ाइल में एक से अधिक नाम या कोई नाम नहीं हो सकता है, इसलिए यह वह फ़ाइल नहीं है जिसका आप नाम बदल रहे हैं बल्कि निर्देशिका प्रविष्टि है। नाम बदलना निर्देशिका प्रविष्टि पर एक ऑपरेशन है, जो इस तथ्य से प्रभावित नहीं है कि फ़ाइल निष्पादन के लिए बंद है।


2
हम्म, फिर किसी भी नियमित फ़ाइल का नाम बदलने का प्रयास क्यों किया गया जो पढ़ने या लिखने के लिए खुला है?
सर्ज

5
@ सर्ज: क्योंकि जिस प्रक्रिया ने विशेष रूप से फ़ाइल खोली है, वह उचित खुले झंडे सेट करके विफल होने के लिए कहती है।
डेविड श्वार्ट्ज

क्या विशिष्ट खुले झंडे?
n611x007

2
सबसे अधिक संभावना है, dwShareModeशून्य पर सेट करना OF_SHARE_COMPATया OF_SHARE_EXCLUSIVEझंडे का उपयोग करना ।
डेविड श्वार्ट्ज

6

यह निष्पादन योग्य फ़ाइल और DLL को हटाने की अनुमति नहीं देता है क्योंकि विंडोज़ निष्पादन योग्य फ़ाइलों के कुछ हिस्सों को प्रक्रिया निर्माण के हिस्से के रूप में मेमोरी में मैप करता है, इसलिए इसे प्रक्रिया के जीवनकाल के दौरान फ़ाइल की आवश्यकता होती है।

दुर्भाग्य से मेरे पास कोई सही कारण नहीं है कि यह अभी भी ऐसी फ़ाइलों का नाम बदलने की अनुमति देता है। मुझे लगता है कि यह dlls और exe फ़ाइलों के अद्यतन को सक्षम करने के लिए किया गया है, जबकि वे सेवा रुकावट के समय को कम करने के लिए चल रहे हैं।

इसके विपरीत लिनक्स (सामान्य रूप से यूनिक्स) एक निष्पादन योग्य फ़ाइल को हटाने की अनुमति देता है जब वह चल रहा हो:

tmp]$ cp /usr/bin/md5sum .;ll md5*; \
(./md5sum /home/pub/iso/FC5/FC-5-i386-DVD.iso & ); \
rm md5sum ; ll md5*;ps -f
-rwxr-xr-x 1 sergey sergey 37276 Oct 16 02:38 md5sum
ls: cannot access md5*: No such file or directory
UID        PID  PPID  C STIME TTY          TIME CMD
sergey    2423  2422  0 02:32 pts/1    00:00:00 -bash
sergey    2533     1  0 02:38 pts/1    00:00:00 ./md5sum /home/pub/iso/FC5/FC-5-
sergey    2536  2423  0 02:38 pts/1    00:00:00 ps -f

ध्यान दें कि लिनक्स भी निष्पादन योग्य फ़ाइलों के कुछ हिस्सों को मेमोरी में मैप करता है, लेकिन आपको रनिंग एक्जीक्यूटेबल को हटाने की अनुमति देने में कोई समस्या नहीं है।
क्रिसइंटेमॉन्टन

2
@ChrisInEdmonton हां, लेकिन यह मैंने यहां समझाया: unix.stackexchange.com/questions/49299/…
सर्ज

सर्ज, वहाँ अच्छी व्याख्या। :)
क्रिस इंडेमोंटॉन

लिनक्स आपको निष्पादित करते समय एक फ़ाइल को हटाने की अनुमति नहीं देगा। हालाँकि, आप निर्देशिका प्रविष्टियों को हटा सकते हैं, क्योंकि वे निष्पादित नहीं कर रहे हैं।
डेविड श्वार्ट्ज

@DavidSchwartz कृपया मेरे उत्तर के लिए अद्यतन देखें। लिनक्स मुझे किसी भी फाइल को अनलिंक करने की अनुमति देता है, बशर्ते कि उस फाइल को हटाने के लिए मेरे पास पर्याप्त अनुमति हो।
सर्ज

2

मुझे लगता है कि यह इसलिए है क्योंकि एक नाम फ़ाइल की एक ही द्विआधारी सामग्री का एक गुण है, इसलिए जब तक डेटा है, संभाल, इसके लिए चल रही प्रक्रिया द्वारा आयोजित परिवर्तन नहीं होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.