2010-11-24 15 views
5

कहलाया जा सकता है हमारे पास एक उत्पाद है जो एक सी # कंसोल ऐप है। क्या इसे केवल कमांड लाइन से चलाने के लिए प्रतिबंधित करना संभव है? दूसरे शब्दों में, उपयोगकर्ता इसे किसी स्क्रिप्ट या किसी अन्य ऐप से कॉल नहीं कर पाएंगे।सी #: प्रतिबंधित करें कि कंसोल ऐप को

यदि ऐसा है, तो कुछ उदाहरण कोड की सराहना की जाएगी। धन्यवाद।

+0

तुम सच में डॉस कमांड लाइन (command.com), या NT कमांड लाइन (cmd.exe) मतलब है? या कोई कंसोल आवेदन ठीक है? – CodesInChaos

+0

और आप क्या हासिल करने की कोशिश कर रहे हैं? आप अन्य कार्यक्रमों को अपना प्रोग्राम शुरू करने से क्यों रोकना चाहते हैं? – CodesInChaos

+0

@CodeInChaos: अच्छे अंक। कोई कंसोल ऐप ठीक है। मैं अनुप्रयोग एक और उत्पाद या सेवा के भाग के रूप में इस्तेमाल किया जा रहा है को रोकने के लिए चाहते हैं। – FunLovinCoder

उत्तर

3

आप यहां दी गई कोड का उपयोग करके अपना आवेदन बनाने वाली प्रक्रिया की जांच कर सकते हैं: http://msdn.microsoft.com/en-us/netframework/aa569609.aspx#Question3। डॉस कमांड लाइन पर शुरू करने के लिए मूल प्रक्रिया cmd.exe होना चाहिए। नोट हालांकि कॉलिन द्वारा इंगित किया गया है कि इसे बैच स्क्रिप्ट का उपयोग करके आसानी से बाईपास किया जा सकता है। आप यह सुनिश्चित करके भी अक्षम कर सकते हैं कि cmd.exe को कमांड प्रॉम्प्ट तर्क शून्य हैं। इसके लिए आपको WMI का उपयोग करने की आवश्यकता होगी:
http://skysanders.net/subtext/archive/2010/04/11/using-wmi-to-fetch-the-command-line-that-started-all.aspx
आपको cmd.exe छवि को system32 फ़ोल्डर से भी जांचना चाहिए।

+0

बैच स्क्रिप्ट से एप्लिकेशन प्रारंभ होने पर मूल प्रक्रिया क्या है? –

+0

@ कोलिन: स्क्रिप्ट होस्ट, मुझे लगता है। यही है ना जैसे डब्ल्यूएसएच – abatishchev

+0

नहीं, मैंने अभी कोशिश की है, यह cmd.exe –

3

मुझे नहीं लगता कि अंतर को बताना संभव है।

निश्चित रूप से मूल प्रक्रिया एक उपयोगी संकेतक नहीं है। यह वही है आप माता-पिता की प्रक्रिया में मिलता है:

1. type app name into Command Prompt:  cmd.exe 
2. call app from batch script:   cmd.exe 
3. Double click on app or shortcut:  explorer.exe 
4. type app name into Run dialog box:  explorer.exe 

आप का इरादा 1. एक मान्य तरीका है अपने कार्यक्रम शुरू करने के लिए होने के लिए, तो मुझे नहीं लगता कि आप 2. बंद कर सकते हैं अपने अनुप्रयोग हो सकता है जिसका मतलब है कि करते हैं किसी भी स्क्रिप्ट या किसी कार्यक्रम से कहा जाता है (क्योंकि यह आसान है एक अन्य कार्यक्रम एक 1 लाइन बैच स्क्रिप्ट बनाने के लिए करने के लिए और इसे निष्पादित)

(BTW, किसी को StackOverflow पर एक मेज पाने के लिए एक तरह से पता है?)

+0

क्या वहां है दादाजी को खोजने के वैसे भी? फिर आप जांच सकते हैं कि cmd.exe किसी स्क्रिप्ट या अज्ञात प्रक्रिया के बजाय आप अपेक्षा करते हैं या नहीं? – FunLovinCoder

+0

प्रक्रिया शुरू करने के कई तरीके हैं, कार्य प्रबंधक -> फ़ाइल -> रन दिमाग में आता है, मुझे यकीन है कि ऐसे कुछ भी हैं जो दिमाग में नहीं आते हैं। – Tergiver

+0

ओह हाँ, ये केवल उदाहरण के रूप में थे। कार्य शेड्यूलर एक और होगा। –

1

@ स्विस्स्टन अगर आप अपने कंसोल एप्लिकेशन को अपने दूसरे एप्लिकेशन से शुरू करते हैं, तो मैं आपको "कर्नेल ऑब्जेक्ट्स नाम" की सिफारिश करना चाहता हूं। उदाहरण के लिए mutex। आप अपने मूल ऐप में नामित म्यूटेक्स बना सकते हैं। फिर अपने बच्चे कंसोल ऐप के मुख्य धागे में इस म्यूटेक्स को खोलने का प्रयास करें। यदि म्युटेक्स खोला नहीं (नहीं मिला): कंसोल अनुप्रयोग जारी रखने के लिए कोई अनुमति और बंद होना चाहिए है;) इंतजार, मैं आप के लिए कुछ कोड बनाती हूँ;)

संपादित करें: तो यह बहुत आसान है रणनीति।

Mutex mutex = new Mutex(true, "MyPermissions"); 

तो अपने बच्चे को सांत्वना आवेदन की जांच में अपने म्युटेक्स मौजूद: पेरेंट एप्लिकेशन में अपने नामित म्युटेक्स बनाने

static bool CheckPermissions() 
    { 
     try 
     { 
      Mutex mutex = Mutex.OpenExisting("MyPermissions"); 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 
    } 

यदि आपका सांत्वना आवेदन अपने माता पिता के आवेदन CheckPermissions विधि के बिना चला गया था अवास्तविक लौटाते हैं और कंसोल को बंद कर दिया जाना चाहिए;)

+1

यह मदद नहीं करता है क्योंकि मूल ऐप कहीं से भी बुलाया जा सकता है। आपने कुछ भी हल किए बिना समस्या को एक स्तर तक ले जाया है। – Tergiver

0

मैं तुम क्या करने की कोशिश कर रहे हैं से सहमत नहीं हैं, लेकिन यहाँ एक विचार है कि काम कर सकता है: कार्यक्रम की शुरुआत में उपयोगकर्ता इनपुट के कुछ प्रकार, हो सकता है किसी प्रकार का की आवश्यकता होती है कैप्चा (कमांड लाइन में करना मुश्किल है, लेकिन सैद्धांतिक रूप से संभव है। ASCII कला सोचो)।

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