2011-06-17 6 views
7

मेरे पास एक बैकअप ऐप है जो बैकअप से पहले उपयोगकर्ता द्वारा परिभाषित चल रहे प्रोग्राम बंद कर देगा ताकि खुली डेटा फ़ाइलों को बंद किया जा सके और बैकअप से पहले फ़्लश किया जा सके। बैकअप पूरा होने के बाद यह सूची में कार्यक्रमों को पुनरारंभ करता है।TerminateProcess से एक दयालु तरीका?

मुझे कैप्शन और पोस्टमेसेज (ऐपहैंडल, WM_CLOSE, 0,0) का उपयोग करके विंडो हैंडल प्राप्त करने में कोई समस्या नहीं है; यह अधिकांश ऐप्स के लिए ठीक काम करता है, लेकिन अधिसूचना क्षेत्र (सिस्टम ट्रे)

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

मैं लंबी और कठिन खोज की है और मैं अधिसूचना क्षेत्र क्षुधा को बंद करने के लिए एक अच्छा रास्ता नहीं मिल रहा। किसी को भी कृपया मदद कर सकते हैं?

धन्यवाद

+3

'टर्मिनेट प्रोसेस' फाइलें खुली नहीं छोड़ती है। स्वामित्व की प्रक्रिया बंद होने पर सभी खुले हैंडल बंद हो जाते हैं। इसके अलावा, अगर आप खुले फाइलों का बैक अप लेना चाहते हैं, तो ओएस पहले से ही एक एपीआई प्रदान करता है: छाया प्रतिलिपि। –

+0

@Rob: खुले फ़ाइलों को बैक-अप करने का प्रयास करने से आप एक असंगत स्थिति में रहते हुए स्नैपशॉट ले सकते हैं। – Gabe

+1

@Gabe, अनपेक्षित रूप से प्रोग्राम बंद करने से भी बदतर नहीं ... – bdonlan

उत्तर

8

आदेश में एक बंद करने के लिए कार्यक्रम को खुशी से, आपको इस बारे में कुछ जानने की जरूरत है कि वह प्रोग्राम कैसा होने की अपेक्षा करता है losed। यदि मुख्य विंडो बंद करना इसे पूरा करता है, तो आपको "मुख्य" विंडो को पहचानने के बारे में जानने की आवश्यकता है।

प्रोग्राम अधिसूचना क्षेत्र में "इन" नहीं चलाते हैं। वे वहां आइकन प्रदर्शित करते हैं। अधिसूचना आइकन वाले किसी भी प्रोग्राम में एक विंडो भी होनी चाहिए (क्योंकि खोल प्रोग्राम को बताती है कि आइकन को विंडो पर संदेश भेजकर क्लिक किया गया है)। भले ही खिड़की दिखाई नहीं दे रही है, फिर भी यह अस्तित्व में होना चाहिए। यदि आप किसी विशेष अधिसूचना आइकन से जुड़े विंडो की पहचान करने वाले गुणों का कुछ सेट निर्धारित कर सकते हैं, तो आप इसे बंद कर सकते हैं। देखने के लिए गुणों का कोई मानक सेट नहीं है, हालांकि; प्रत्येक कार्यक्रम इसे अलग-अलग कर सकता है।

और यहां तक ​​कि यदि आपको वह विंडो मिलती है जिसे आप ढूंढ रहे हैं, तो यह बंद हो सकता है कि प्रोग्राम को समाप्त होने की अपेक्षा न हो। यह अधिसूचना आइकन के मेनू से एक निश्चित कमांड की उम्मीद कर सकता है, या प्रोग्राम द्वारा प्रदर्शित एक संवाद बॉक्स द्वारा भेजा गया कुछ संदेश।

+1

+1। आपको पता नहीं है कि प्रोग्राम को क्लीनअप ऑपरेशंस करने के लिए क्या ट्रिगर करेगा। निश्चित रूप से, आप अपनी छिपी हुई विंडो को WM_QUIT या कुछ भेज सकते हैं, लेकिन यह टर्मिनप्रोसेस – bdonlan

+0

के साथ सभी क्लीनअप को अच्छी तरह से छोड़ सकता है, मुझे एहसास है कि, लेकिन कम से कम wm_Close का उपयोग टर्मिनप्रोसेस के साथ बंद करने से बेहतर है। एक सभ्य बंद सभी आवश्यक सफाई को कवर करने की अधिक संभावना है।यदि नहीं, कम से कम मेरे ऐप ने चीजों को धीरे-धीरे बंद करने की कोशिश की। नीचे मेरी दूसरी टिप्पणी देखें। – user568160

2

यदि आपका एप्लिकेशन Windows Vista या Windows 7 पर चल रहा है, तो प्रोग्राम बंद न करें - इसके बजाय फ़ाइलों के स्नैपशॉट तक पहुंचने के लिए Volume Shadow Copy service का उपयोग करें, जबकि वे अभी भी उपयोग में हैं। यह विंडोज 7 अंतर्निहित बैकअप प्रोग्राम करता है।

यदि आप विंडोज के पहले संस्करण पर हैं, तो कोई मूर्खतापूर्ण समाधान नहीं है। यदि प्रोग्राम में सिस्ट्रे आइकन है, तो इसमें एक छिपी खिड़की भी होगी, और आप WM_QUERYENDSESSION और WM_ENDSESSION को भेजने का प्रयास कर सकते हैं। हालांकि, कोई गारेंटी नहीं है कि कार्यक्रम बंद हो जाएगा, और यदि यह बंद हो जाता है, क्योंकि आप अपनी सामान्य शटडाउन प्रक्रिया के कुछ हिस्सों को छोड़ सकते हैं, तो यह सामान्य सफाई को पूरा नहीं कर सकता है। कोई भी विंडोज़ के साथ चलने वाले प्रोग्राम भी हो सकते हैं। सबसे अच्छा तरीका शायद उपयोगकर्ता को लॉग ऑफ करना होगा, और सेवा प्रक्रिया से बैकअप निष्पादित करना होगा। बेशक, आपको अभी भी अन्य सेवाओं द्वारा खोले गए फाइलों के साथ मुद्दों को साझा करना होगा ...

+0

धन्यवाद दोस्तों, लेकिन यह छाया प्रतिलिपि थी जिसने मुझे पहली बार समस्या के बारे में चेतावनी दी थी। शैडो कॉपी के साथ किसी भी प्रोग्राम जो चलते समय विशेष उपयोग के लिए फ़ाइलों को डिक्रिप्ट करते हैं और फिर "साफ़ करें" स्थिति में बंद पर एन्क्रिप्ट करते हैं। मेरे सभी पासवर्ड कॉपी और बैक अप साफ़ किए गए थे !! {gasp} यही कारण है कि मैं दयालुता से बंद करना चाहता हूं और ऐप को अपनी बंद प्रक्रिया के माध्यम से जाने देना चाहता हूं जो टर्मिनेट नहीं करता है। – user568160

+2

उन कार्यक्रमों को तोड़ दिया गया है; यही सब है इसके लिए। आप अस्थायी निर्देशिकाओं को छोड़ने का प्रयास कर सकते हैं, लेकिन यदि कोई पासवर्ड प्रोग्राम अपना पासवर्ड डेटाबेस डिक्रिप्ट कर रहा है और इसे डिस्क पर छोड़ रहा है, तो यह पहले से ही एन्क्रिप्शन बेकार बना रहा है (एक हमलावर सिर्फ हटाए गए फ़ाइलों के लिए डिस्क स्कैन कर सकता है!) – bdonlan

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