2012-06-19 13 views
10

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

मैंने सोचा कि मैं जोड़ूंगा कि यदि आवश्यक हो तो मैं जेएनए या जेएनआई का उपयोग करने के इच्छुक हूं, और मुझे लगता है कि यह होने जा रहा है।

+3

सुनिश्चित नहीं है कि आप ओएस पर निर्भर होने के बिना ऐसा करने में सक्षम होंगे, इस प्रकार आपके आवेदन की पोर्टेबिलिटी सीमित कर सकते हैं। – cklab

+4

हां, यह एक विंडोज़ केवल समाधान होगा, लेकिन यह केवल विंडोज़ समस्या है। सैकड़ों लिनक्स सर्वर पर एक ही स्वचालित कार्य पहले से ही ठीक से चल रहा है। अगर हम इसे समझते हैं, तो हम इस समाधान के लिए लिनक्स पर कोड निष्पादित नहीं करेंगे। – skiphoppy

उत्तर

2

ऐसा करने के लिए आप उत्कृष्ट Sysinternals Process Explorer का उपयोग कर सकते हैं, और यह जावा प्रक्रियाओं तक ही सीमित नहीं है।

विवरण के लिए this posting देखें। मुझे नहीं पता कि जावा से इस कार्यक्षमता को कैसे बुलाया जाए।

+0

क्या आपके पास लाइसेंस के बारे में जानकारी है? क्या यह खुला स्रोत है? –

+0

हमारे पास प्रक्रिया एक्सप्लोरर है, लेकिन मुझे प्रोग्रामेटिक रूप से ऐसा करने का एक तरीका चाहिए। – skiphoppy

1

ऐसा करने का एक गंदा तरीका प्रशासनिक विशेषाधिकारों के साथ अपना आवेदन चलाने और ProcessBuilder का उपयोग कर Handle जैसे कमांड उपयोगिता का आह्वान करना है। आदर्श रूप में

, मैं प्रोग्राम रूप प्रोसेस एक्सप्लोरर, unlocker, हैंडलर, आदि जैसे क्या उपकरण, करते हैं, और फिर जानकारी चाहते हैं:

+0

यह सबसे अच्छा हो सकता है, क्योंकि हैंडल और इसी तरह की उपयोगिताएं संभवतः विभिन्न विंडोज संस्करणों में काम करने के सभी जटिल कार्यों को समाहित करती हैं। – skiphoppy

0

मेरा अपना प्रारंभिक जवाब (कृपया, किसी को बेहतर करते हैं!) जेएनए या इसी तरह के जावा से कॉल करें। लेकिन ऐसा लगता है कि डेटा संरचनाएं शामिल हैं जो प्रत्येक विंडोज रिलीज के लिए बदलती हैं, इसलिए यह बहुत नाजुक लगता है। शामिल सिस्टम कॉल को NtQuerySystemInformation नाम दिया गया प्रतीत होता है।

ऐसा लगता है कि हम किस तरह से काम कर रहे हैं, विंडोज विस्टा के लिए पसंदीदा दृष्टिकोण "पुनरारंभ प्रबंधक एपीआई" का उपयोग करना है, जो सिस्टम को पुनरारंभ करता है, सभी खुले फ़ाइलहेडल्स को साफ़ करता है। (स्रोत: http://social.msdn.microsoft.com/Forums/sv/netfxbcl/thread/37dc9843-2583-41fc-8260-b78183aa4bed) हम निश्चित रूप से ऐसा नहीं करना चाहते हैं, अगर हम इसकी मदद कर सकते हैं।

+0

पुनरारंभ प्रबंधक का उद्देश्य * को पुनरारंभ करने के लिए * पुनरारंभ करना है, एक को ट्रिगर नहीं करना है। –

+0

धन्यवाद। मैं शायद गलतफहमी कर रहा हूं, और मैं इसे फिर से पढ़ूंगा। – skiphoppy

2

मैंने जीएनए परियोजना के लिए गिथब पर एक समान प्रश्न पूछा और @matthiasblaesing इसे पूरा करने के लिए एक कोड लिखा।

कोड here है।

यह प्रारूप में सभी चल रही प्रक्रियाओं के साथ एक सूची मुद्रित करता है: <exe>: <type>: <path>

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

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