एक गेम लोगों को खुद के कई उदाहरणों को चलाने से कैसे रोक सकता है?


15

Starcraft II मुझे कई उदाहरणों को चलाने से प्रतिबंधित करता है, लेकिन अगर मैं सैंडबॉक्स में सैंडबॉक्स वाला दूसरा उदाहरण चलाता हूं , तो यह काम करता है। इसका क्या हिसाब हो सकता है?

मैं अपने खुद के खेलों के लिए इस व्यवहार को कैसे दोहरा सकता हूं?

जवाबों:


15

Starcraft 2 के अलावा, इसका सामान्य उत्तर है: अधिग्रहण (और लॉक, यदि अधिग्रहण स्वयं पहले से ही लॉकिंग के बराबर नहीं है) ऑपरेटिंग सिस्टम से एक विशिष्ट संसाधन। यदि अधिग्रहण / लॉकिंग विफल रहता है तो गेम से बाहर निकलें। ऐसे संसाधनों के उदाहरण हैं:

  1. विशिष्ट टीसीपी या यूडीपी पोर्ट।
  2. पारस्परिक रूप से अनन्य ताले ("म्यूटेक्स") या सेमाफोरेस (वे दोनों अक्सर ओएस स्तर पर संबंधित होते हैं)
  3. फ़ाइलें (लॉग फ़ाइलें अक्सर सबसे स्पष्ट विकल्प होती हैं)

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


5
इसके अलावा यह संभव सुरक्षा जटिलताओं को ध्यान में रखने के लिए उपयोगी हो सकता है: " एक एकल-उदाहरण कार्यक्रम यह स्वयं सेवा से वंचित है "।
13

चूंकि यह सैंडबॉक्स में काम करता है, इसलिए यह संभवत: पहला नहीं है। 2 या 3 अच्छी संभावनाएं हैं, जो इस बात पर एक नज़र डालती हैं कि उनकी प्रक्रियाओं के लिए कौन सी फाइलें खुली हैं, संभवतः इसे पिनपॉइंट करेगी।
डग-डब्ल्यू

3
@ डौग-डब्ल्यू मैं यह नहीं देखता कि यह सैंडबॉक्स में कैसे काम करता है # 1।
अटैकिंगहोबो

@AttackingHobo जब तक मुझे याद नहीं है कि सैंडबॉक्स की जटिलता समझ में नहीं आती है, क्या यह तथ्य नहीं है कि सैंडबॉक्स के बाहर एक बंदरगाह बंधा हुआ है, इसे भीतर से बांधने से रोकना है? या सैंडबॉक्स प्रत्येक प्रोग्राम को इसके अंदर चलने के लिए एक आभासी इंटरफ़ेस प्रदान करता है?
डग-डब्ल्यू

@ विजिल जहां तक ​​मेरा सवाल है, आप पूरे दिन रेमंड चेन को उद्धृत कर सकते हैं, लेकिन कृपया उनके उद्धरणों में व्याकरण संबंधी त्रुटियां न जोड़ें। : P (बस उन्हें कॉपी / पेस्ट करें बजाय।)
hheimbuerger

4

मैं म्यूटेक्स दृष्टिकोण की सलाह देता हूं, लेकिन:

एक अन्य विधि जो अक्सर उपयोग की जाती है, बस जाँच कर रही है कि क्या इसी नाम की एक अन्य प्रक्रिया चल रही है।

लाभ यह है कि यह हास्यास्पद रूप से आसान है - आपको फ़ाइल अनुमतियों के बारे में चिंता करने की ज़रूरत नहीं है या यह जानना है कि म्यूटेक्स क्या है। नकारात्मक पक्ष यह है कि, यदि मशीन पर चल रहा एक अलग प्रोग्राम कहा जाता है, तो आपको एक गलत-सकारात्मक मिलेगा starcraft2.exe


2
हेहे, या यदि उपयोगकर्ता प्रोग्राम का नाम बदलने का फैसला करता है।
ब्रैंडन


1
मुझे और अधिक पसंद आया, क्या होगा यदि उपयोगकर्ता प्रोग्राम को कॉपी करता है और उसका नाम बदलकर दो बार चलाता है?
ब्रैंडन

3

यदि आप C ++ और Windows API का उपयोग कर रहे हैं, तो एक तरीका जो आप कर रहे हैं, का उपयोग कर रहे हैं FindWindow, जहां आप क्लास नाम और / या विंडो नाम जैसे पैरामीटर पास कर सकते हैं। फिर यदि आपको कोई मेल मिलता है, तो लोड करने या विंडो बनाने से पहले अपने प्रोग्राम से बाहर निकलें।

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