2010-06-25 22 views
8

कैसे मैं किसी Taskman या प्रोग्राम के रूप में के माध्यम से अपनी प्रक्रिया की हत्या से मेरी सी # अनुप्रयोग की रक्षा कर सकते हैं?प्रक्रिया से रोकें सी # ऐप्स समाप्त

अनुप्रयोग एक अन्य टीम द्वारा विकसित एक MFC अनुप्रयोग है:

यहाँ मेरी परिदृश्य है। इसमें एक अप्रकाशित टेक्स्ट-आधारित दूरस्थ इंटरफ़ेस है जो बैकडोर के माध्यम से सक्षम है।

मैं एप्लिकेशन बी, जो ए बी के साथ सूचना का आदान प्रदान एक सी # WinForms अनुप्रयोग के विकास कर रहा हूँ जब यह दूरदराज के उपयोग यह बंद कर देता है जब समाप्त हो गया की जरूरत है एक के पिछले दरवाजे में सक्षम बनाता है (या विफलता पर)।

मैं तरीके उपयोगकर्ताओं की खोज कर रहा हूँ इस तरह की हत्या बी की प्रक्रिया के रूप में एक के छिपे कार्यक्षमता के लिए उपयोग, हासिल करने के बी दुरुपयोग कर सकता है के बाद यह एक के रिमोट इंटरफ़ेस में सक्षम बनाया है। जब ऐसा होता है तो मुझे ए के पिछवाड़े को बंद करने के लिए बी के लिए आखिरी मौका चाहिए।

बी ए के साथ बातचीत करने स्थानीय होस्ट का उपयोग करता है, तो मैं सत्ता से नीचे परिदृश्य के बारे में चिंतित नहीं हूँ।

मैं एक समाधान है कि बदलते ए

मैं डार्क स्पर्शरेखा रोकने में सक्षम हो की उम्मीद नहीं कर रहा हूँ (हालांकि कि एक बोनस होगा), लेकिन अभी एक स्क्रिप्ट किडी शामिल नहीं करता है के लिए देख रहा हूँ इस डिजाइन :) Windows XP पर चलाने

ये एप्लिकेशन के साथ अपने तरीके से हो सकता था, लेकिन यह भी जल्द ही विस्टा का समर्थन करेंगे & 7.

अग्रिम धन्यवाद, जिम

+1

ऐसा करने से आपके ऐप को कुछ पहचान इंजनों द्वारा मैलवेयर/वायरस के रूप में फ़्लैग किया जा सकता है। यह अक्सर एक पैटर्न है जो अक्सर वायरस या मैलवेयर द्वारा उपयोग किया जाता है। – Aren

+3

यह भी दिलचस्प है, एंटीवायरस/मैलवेयर स्कैनर द्वारा भी एक रणनीति का उपयोग किया जाता है, क्योंकि मैलवेयर निवासी पहचान सॉफ़्टवेयर को अक्षम करने का प्रयास करेगा। जिसका अर्थ यह है कि ऐसा करने के वैध कारण हैं, हालांकि उपयोग के मामले (आईएमओ) बहुत कम परिभाषित हैं। – Joe

+1

ऐसा लगता है कि आप इससे पहले कि आप दूर जाने से पहले साफ कर लें, इस बारे में अधिक रुचि रखते हैं। यदि आप विस्तृत कर सकते हैं, तो आपको कुछ जवाब मिल सकते हैं जो आपकी * वास्तविक * समस्या को हल करने में आपकी सहायता करते हैं। –

उत्तर

4

आप तब तक नहीं कर सकते जब तक कि उपयोगकर्ता को आपके प्रोग्राम पर टर्मिनेटप्रोसेज को कॉल करने का अधिकार नहीं है, आप अंत कार्यकर्ता को तुरंत कार्य प्रबंधक में मारने से रोक नहीं सकते हैं। रेमंड चेन ने कुछ समय पहले इस पर पोस्ट किया: http://blogs.msdn.com/b/oldnewthing/archive/2004/02/16/73780.aspx

+0

फिर आपने कभी ऐसा वायरस नहीं देखा है जो उपयोगकर्ता को टास्क मैनेजर, कंट्रोल पैनल, या MSCONFIG खोलने से रोकता है?मेरे दोस्त ने "आपके पास वायरस है" पर क्लिक करके इसे पकड़ा! बैनर। दर्दनाक। –

+0

@ फिल - यहां तक ​​कि मैं उस बुराई नहीं जाऊंगा :) वैसे भी, कोई ऐसा ऐप लिख सकता है जो टर्मिनटप्रोसे प्रोग्रामेटिक रूप से निष्पादित करेगा, इसलिए जीयूआई-आधारित समाप्ति के खिलाफ सुरक्षा पर्याप्त नहीं है। –

+2

अंत में, आपके द्वारा प्रदान किए गए लिंक में चर्चा ने मुझे मेरी मूर्खता के बारे में आश्वस्त किया। मैं एक टीम पर वापस धक्का देने जा रहा हूँ। –

4

आप सच में, सच, वास्तव में ऐसा नहीं करना चाहते हैं। यह उपयोगकर्ताओं को बहुत गुस्सा आता है !! हालांकि, अगर यह एक सेवा माना जाता है, तो इसे एक सेवा खाते के रूप में चलाएं और उपयोगकर्ताओं को व्यवस्थापक अधिकार न दें।

+0

मेरी संपादित पोस्ट देखें। –

+0

यह एक WinForms ऐप है। –

2

लघु जवाब: आप नहीं कर सकते हैं और आप नहीं करना चाहिए।

लंबा उत्तर: आप दूसरी 'सहायक' प्रक्रिया शुरू करने का प्रयास कर सकते हैं, जो कि आपका ऐप अभी भी चल रहा है, तो हर एक्स सेकंड की जांच करता है। यदि यह नहीं है, तो यह इसे पुनरारंभ करता है।

यदि आप लंबे समय तक चलने की प्रक्रिया चाहते हैं तो उपयोगकर्ताओं को इसे चलाने के लिए भरोसा न करें, विंडोज सेवाओं पर विचार करें। वे इसके लिए डिजाइन किए गए हैं।

0

जहां तक ​​मुझे पता है आप नहीं कर सकते, और यहां तक ​​कि आप होते, यदि तुम सच में नहीं करना चाहिए। कल्पना करें कि अगर आप किसी एप्लिकेशन को मारने के लिए मजबूर नहीं कर सकते तो यह कितना परेशान होगा।

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

5

जब मैं कोशिश करता हूं तो ऐप को बंद करने के लिए तैयार हूं लेकिन पहले कुछ चीजें करने की आवश्यकता है।

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

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

अंत में, आप अपने प्रोग्राम में एक संवाद बॉक्स जोड़ सकते हैं कि जब वे इसे बंद करने का प्रयास करते हैं, तो उन्हें चेतावनी दी जाती है कि कार्यक्रम को ठीक से बंद करने की आवश्यकता है। यदि आप अपना शट डाउन करते हैं तो उपयोगकर्ता इसे मारना नहीं चाहते हैं और इसे ठीक से समाप्त कर देंगे। यदि आपका शटडाउन उम्र लेता है तो लोग इसे मारने की कोशिश करेंगे। यदि आप अपने उपयोगकर्ताओं के लिए अच्छा हैं, तो वे भी आपके लिए अच्छा लगेगा।

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

+0

आप किसी ऐसे व्यक्ति के लिए व्यापक धारणा बना रहे हैं जो इतनी दृढ़ता से आता है ... विशेष रूप से आप मान रहे हैं कि वह ऐप मारने पर कुछ भी क्यों चलाना चाहता है। यह सुनिश्चित करने के कई कारण हैं कि आप गंदे लिखने/अभी भी खुले लेनदेन करने के अलावा बंद हो जाएं। अधिकतर किसी भी बच्चे की प्रक्रिया या अन्य संसाधनों को बंद करना। –

+0

मुझे एक बार यह समस्या आई है। मेरे पास एक ऐसी प्रक्रिया थी जो स्वयं के अन्य उदाहरणों के साथ संवाद करने के लिए सेमफोर का उपयोग करती थी। यदि आपने इसे गलत समझा है, तो यह सैमफोर पर अज्ञात संख्याओं की संख्या छोड़ देगा, अन्य सभी मामलों को गड़बड़ कर देगा। – Gabe

+0

@ जिम लियोनार्डो: आपके द्वारा उल्लेख की जाने वाली समस्या से संपर्क करने का एक और तरीका यह है कि बच्चे को प्रक्रियाओं को सही तरीके से संभालने के लिए और अधिक मजबूती से प्रोग्राम किया गया है कि मूल कार्यक्रम अचानक निरस्त हो गया था। वितरित आवेदन में मजबूती बढ़ जाती है यदि प्रत्येक घटक दूसरों के समझदारी से स्वतंत्र रूप से काम करने में सक्षम हो। –

2

मुझे लगता है कि सभी ने इस बिंदु को याद किया है। अगर मैं इसे सही ढंग से पढ़ता हूं (आपके संपादन के बाद) आप जानना चाहते हैं कि आपको "मार डाला जा रहा है" ताकि आप शानदार तरीके से बंद कर सकें?

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

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

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

सेवा की जा सकती है। – Rohit

+0

+1 "अगली बार ऐप शुरू होने पर पुनर्प्राप्ति करें", क्योंकि अप्रत्याशित शट डाउन होता है (पावर इवेंट, डिस्क विफलता, आदि) –

+0

@rohit - कई उपयोगकर्ता जानते हैं कि कार्यों को कैसे मारना है। अपेक्षाकृत कुछ जानते हैं कि सेवा को कैसे रोकें, अकेले चलो * एक को मार डालो। –

0

आवेदन पहली बार आपको लगता है कि पृष्ठभूमि में चल रहा एक 3 एपी/प्रक्रिया नहीं निष्पादित कर सकता है के लिए शुरू की और अनुप्रयोग बी के लिए हर तो कॉलबैक करने का प्रयास करता ऑफटर, तो जब वह ऐप बी बंद हो जाता है .. ऐप सी इसे देख सकता है और एप ए के बैकडोर को बंद करने की प्रक्रिया को निष्पादित करता है।

तो यह है कि जब अनुप्रयोग बी यह ऐप बी जाँच की ओर से एप्लिकेशन सी को निष्क्रिय कर देगा इरादा बंद करें बटन के माध्यम से सफलतापूर्वक बंद कर देता है अभी भी ठीक काम कर रहा है ...

इम नहीं वास्तव में इस समय के साथ सी # सबसे अच्छा लेकिन को देखकर अपने समस्या यह है कि संभवतः मैं इसे करने का प्रयास करता हूं ..

यदि ऐप बी ऐप सी को भी जांचता है तो यदि ऐप सी नीचे चला गया है तो ऐप बी बैकडोर बंद कर देगा अगर यह कर सकता है।

जैसा कि अन्य कहते हैं कि यह एक अच्छा विचार नहीं हो सकता है।

+0

दिलचस्प। दुर्भाग्य से, "ऐप बी" वास्तव में अनुप्रयोगों की एक वर्ग का प्रतिनिधित्व करता है, जिनमें से प्रत्येक पीछे के दरवाजे में हेरफेर करता है। हालांकि एक समय में केवल एक बी चल रहा है, यह जटिल होगा कि कैसे एक तृतीय ऐप/सेवा बी के अस्तित्व की निगरानी करने में सक्षम होगी। –

+0

जैसा कि मैंने कहा था और मैं इस क्षेत्र में कौशल की कमी के लिए क्षमा चाहता हूं लेकिन मेरी टिप्पणी उस पर आधारित थी जो मैंने सोचा था और मैं इस तरह की स्थिति को हल करने के बारे में कैसे जाऊंगा। मेरी ओर से इसे बनाना और तैनात करना एक मजबूत बिंदु पर नहीं जा रहा है, मैं केवल आपको एक व्यावहारिक समाधान देने की कोशिश कर रहा था। आपका आदमी काम करने के लिए कैसे काम करता है। – RobertPitt

+0

हां, मुझे एहसास है कि। मुझे अपना कोड लिखने की तलाश नहीं है, बस आपको बी अवधारणा के बारे में अधिक जानकारी दे रही है। कार्य पूरा होने पर –

1

आदेश समाप्त किया जा रहा से अपने आवेदन को रोकने के लिए, आप एक अन्य उपयोगकर्ता (अर्थात एक सेवा, या किसी अन्य उपयोगकर्ता खाते के रूप में के रूप में) के रूप में अपने आवेदन चलाते हैं, और सीमा प्रयोक्ता किसी स्टैंडर्ड उपयोगकर्ता

इस प्रकार कोई दुर्भावनापूर्ण उपयोगकर्ता आपकी प्रक्रिया को मार नहीं सकते हैं, क्योंकि केवल प्रशासक ही इसे मार सकते हैं, और यह एक विशेषाधिकार है कि जाहिर है, आप किसी पर भरोसा नहीं करते हैं।

ऑपरेटिंग सिस्टम के इच्छित डिजाइन का पालन करने का इसका लाभ है।

1

@Jim

अनुप्रयोग एक संशोधन का अनुरोध करता है

  1. अधिमानतः, प्राप्त कर सकते हैं, तो मैं करूंगा एक वास्तुकला जहां सभी अनुप्रयोग बी के पिछले दरवाजे खोलने पर पंजीकृत हैं और पंजीकरण के साथ अनुप्रयोग एक पिंग करने के लिए आवश्यक हैं एक अंतराल पर ताकि ऐप ए ऐप बी पर अपने स्वयं के पिछवाड़े को बंद कर सके, यह सूचित न करे कि उसे अभी भी पहुंच की आवश्यकता है। यह अभी भी पूरी तरह से सुरक्षित नहीं है लेकिन ऐप ए को ऐसे इंटरफ़ेस के साथ संरचित नहीं किया जाना चाहिए, संचार के "सुरक्षित" साधनों के लिए किसी प्रकार के स्वयं विनियमन के बिना।

  2. या, आप सुझाव दे सकते हैं कि ऐप ए को वैध प्रक्रियाओं की जांच करने के लिए संशोधित किया जा सकता है और अगर कोई पिछला नहीं है, तो यह बंद हो जाता है, यह बंद हो जाता है (यह संसाधित नाम से चलने योग्य है)।

अन्यथा, ऐसा लगता है कि ऐप बी को जितनी बार संभव हो सके बैकडोर को बंद करना चाहिए जब उसे तत्काल पहुंच की आवश्यकता नहीं है।

ऐप ए तक पहुंच की सुरक्षा प्रदान करने के लिए ऐप बी की आवश्यकता है वास्तव में एक खराब मॉडल है।

+0

बी पिछवाड़े बंद कर देता है। मैं सहमत हूं, ए को बेहतरीन रूप से डिज़ाइन नहीं किया गया है। –

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