किसी भी विंडोज़ अनुप्रयोग के कई उदाहरण चलाएं


11

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

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

अगर वहाँ कुछ भी नहीं है, तो मैं एक उपकरण / हैक प्रोग्राम करना चाहता हूं जो मुझे ऐसा करने देगा। मैं उन बिंदुओं की तलाश कर रहा हूं जहां शुरू करना है - क्या शामिल होगा, क्या कौशल की आवश्यकता होगी। मेरे पास C और Java में मध्यम प्रोग्रामिंग कौशल हैं।

यदि ऐसा नहीं किया जा सकता है, तो कृपया इसकी व्याख्या करें।

संपादित करें: मैं इसके बुरे विचार को जानता हूं लेकिन मुझे अभी भी इसे (विभिन्न कारणों से) करने की आवश्यकता है। मैं एक सामान्य तरीका चाहता हूं जो किसी भी एप्लिकेशन के लिए काम करता है और त्रुटियों का परिचय नहीं देता है।


3
Windows अनुप्रयोग डिफ़ॉल्ट रूप से एकल नहीं हैं। यदि वे हैं, तो इसका मतलब है कि किसी ने इसे एक एकल बनाने के लिए अतिरिक्त प्रयास में रखा है और शायद ऐसा करने का एक कारण है।
सिलिको में

1
कई प्रतियों के लिए आवेदन कैसे जांच रहा है, इस पर निर्भर करता है। विभिन्न एप्लिकेशन विभिन्न तरीकों से जांचते हैं और कुछ एप्लिकेशन कई तरीकों से जांच करेंगे।
1

जैसा कि सिलिको में हालांकि कहा गया है, यह शायद एक अच्छा विचार नहीं है। यदि आपके पास ऐसी कई प्रतियाँ नहीं हैं, जो आपके पास नहीं हैं, तो एप्लिकेशन भ्रष्ट डेटा, क्रैश या अन्य समस्याओं का कारण बन सकता है।

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

क्या आपने हल खोज लिया?
टॉमस

जवाबों:


2

कई एप्लिकेशन प्रक्रियाओं की वैश्विक सूची (EnumProcesses, OpenProcess, GetModuleBaseName और इसी तरह के कार्यों के साथ) या विंडोज़ की सूची (EnumWindows, EnumChildWindows के साथ) की जांच करते हैं।

आप उस एप्लिकेशन से विशिष्ट API फ़ंक्शन कॉल को हुक करने के लिए हुक सेट करने के लिए (नमूने SetWindowsHookEx, CallNextHookEx, आदि देखें) की कोशिश कर सकते हैं और आवेदन को मूर्ख बनाने के लिए आपके साथ प्रतिक्रिया में अनुरोधित डेटा को बदल सकते हैं।


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

4

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

16-बिट विंडोज में, जब एक प्रोग्राम शुरू हुआ, तो OS ने इसे एक अनूठा हैंडल दिया जिसे HINSTANCE कहा जाता है। इसे एक ही निष्पादन योग्य (यदि कोई हो) का उपयोग करके वर्तमान में चल रही प्रक्रिया का संकेत दिया जाएगा। उन दिनों में, यह कार्यक्रम के लिए शायद सबसे आम तरीका था यह जानने के लिए कि क्या एक प्रतिलिपि पहले से ही चल रही थी। 32-बिट विंडोज में, संरक्षित मेमोरी, प्रक्रिया-विशिष्ट एड्रेस स्पेस और सहकारी मल्टीटास्किंग के अंत के साथ, हिंस्टांस का अब कोई अर्थ नहीं रह गया है।

ऐप की एक छोटी संख्या बस "प्रयोज्य" के लिए ऐसा करती है, लेकिन कई अन्य लोगों के लिए, एकलताओं को लागू करने का एक अच्छा कारण हो सकता है। वह दरकिनार जो डेटा भ्रष्टाचार या बस चलाने में विफल हो सकता है।


3

आप विभिन्न उपयोगकर्ताओं के खातों पर एप्लिकेशन चला सकते हैं और उदाहरण जाँच अब काम नहीं करेगा।


2

हो सकता!

यहाँ 4 विंडो में आधे-अधूरे 1 4x चलन में मेरी एक छवि है जो सभी एक ही LAN सर्वर से जुड़ी है, एकमात्र समस्या नियंत्रकों को स्वतंत्र रूप से प्रत्येक विंडो से लिंक नहीं होने की है।

https://web.archive.org/web/20150315150158if_/http://img29.imageshack.us/img29/5642/yc0y.jpg

ऐसा करने के लिए, आपको 'प्रोसेस एक्सप्लोरर' की आवश्यकता होती है - एक प्रोग्राम जो आपको वह करने की अनुमति देता है जो 'BaseNamedObjects \ ValveHalfLifeLauncherMutex' सब-प्रोसेस या कुछ पर 'क्लोज हैंडल' के रूप में जाना जाता है। यह इतना मुश्किल नही है। विस्तृत निर्देशों के लिए यहां जाएं - http://am.half-lifecreations.com/forums/index.php?topic=479.0

लेकिन हाँ, जो आधे-अधूरे जीवन के लिए है, लेकिन प्रोसेस एक्सप्लोरर प्राप्त करें और सुनिश्चित करें कि आप उन कार्यक्रमों को प्राप्त करने में सक्षम होंगे, जिन्हें आप मल्टी-टाइम पर चलाना चाहते हैं।

मैं यह नहीं देखता कि खिडकियों / स्नैपों में मल्टीप्ले रनिंग गेम्स को वैसे भी लागू क्यों नहीं किया जाता है! इसकी स्पष्ट रूप से क्योंकि लोग कई पीसी के रूप में नहीं खरीदेंगे ... सॉफ्टएक्सपसंद की जांच भी वास्तव में भयानक है, यू को विंडोज़ के कई उदाहरणों को उपयोगकर्ताओं के रूप में चलाने की अनुमति देता है


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

ऐसा नहीं है क्योंकि लोग अधिक पीसी नहीं खरीदेंगे। ऐसा इसलिए है क्योंकि डेवलपर्स केवल सिंगलटन इंस्टेंस चाहते थे।
वेस्ले लॉन्ग

1

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


0

विंडोज 8 और नए में, आप Shift कुंजी को दबाए रखें और टास्कबार पर प्रोग्राम के आइकन / बटन पर क्लिक करें। यह निष्पादन योग्य को फिर से लॉन्च करेगा। यदि एप्लिकेशन क्लोन के लिए स्वयं की जांच नहीं करता है, तो आपके पास एक नई विंडो होगी।

अगर यह उदाहरण के लिए एक आंतरिक sqlite फ़ाइल को खोलता है, तो यह संभावित रूप से एप्लिकेशन आंतरिक फ़ाइलों के साथ टकराव पैदा करेगा, इसलिए आपको वास्तव में पता होना चाहिए कि आप क्या कर रहे हैं या अगर कुछ टूटता है तो परवाह न करें।

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