से इन-प्रोसेस साझा लाइब्रेरी के रूप में एआईआर रनटाइम को कैसे लोड कर सकता हूं, मैं java.exe की लाइनों के साथ सी में एक विशेष एयर लॉन्चर प्रोग्राम बनाना चाहता हूं।मैं सी प्रोग्राम
मैंने एक प्रक्रिया दर्शक के साथ एआईआर प्रोग्राम चलाने पर देखा है और उपयोग किए जा रहे एआईआर रनटाइम डीएलएल का पता लगाने में सक्षम था। एआईआर प्रोग्राम जावा से अलग हैं कि वे प्लेटफॉर्म-विशिष्ट निष्पादन योग्य के रूप में स्थापित हैं जो एआईआर रनटाइम को इन-प्रोसेस साझा लाइब्रेरी के रूप में लॉन्च करने के बाद बाध्य करते हैं (उनका आइकन उपयोगकर्ता द्वारा डबल-क्लिक किया जाता है)।
ठीक है, मैं एक एआईआर लॉन्चर बनाना चाहता हूं जो java.exe की तरह है।
java.exe को प्लेटफ़ॉर्म ओएस प्रक्रिया के रूप में लॉन्च किया गया है जो जावा जेवीएम रनटाइम (जेआरई) को एक इन-प्रोसेस साझा लाइब्रेरी के रूप में जोड़ता है। जावा एप्लिकेशन जिसे निष्पादित किया जाना है java.exe को कमांड लाइन तर्क के रूप में निर्दिष्ट किया गया है। एक बार java.exe चल रहा है और JVM पूरी तरह कार्यात्मक है, निर्दिष्ट जावा एप्लिकेशन क्लास निष्पादन के लिए JVM क्लास लोडर द्वारा लोड किया गया है। उस निर्दिष्ट जावा एप्लिकेशन को java.exe की प्रक्रिया को "अपहरण" के अर्थ में लिया जाता है। बेशक, निर्दिष्ट जावा एप्लिकेशन किसी भी प्रक्रिया सूची में java.exe प्रोग्राम के रूप में दिखाई देता है जो इसे होस्ट करता है।
मैं इस तरह एआईआर ऐप लॉन्च करने का काम करना चाहता हूं। क्यूं कर? इसलिए मैं एआईआर को हैक करने के तरीकों का पता लगा सकता हूं और शायद इसकी कई, कई कमियों को दूर कर सकता हूं। उदाहरण के लिए, शुरुआत करने वालों के लिए मैं एआईआर रनटाइम अनुभव को कुछ नए एपीआई के साथ विस्तारित करना चाहता हूं जो चल रहे एआईआर एप्लिकेशन के लिए उपलब्ध हो जाएं।
मेरे व्यवसाय का पहला होगा:
- एक बाध्यकारी जो .NET PInvoke
- करने के लिए तुलनीय है सेल्सियस तक actionscript3 के इंटरफेस को लागू करें शुरू करने कि के बराबर है प्रक्रिया के लिए एक API जोड़े में यह एपीआई ऐसा करने के लिए जावा एसई (Runtime.exec, प्रोसेसबिल्डर, प्रक्रिया)
- पर एआईआर एप्लिकेशन के लिए समर्थन जोड़ें stdin से बातचीत करने में सक्षम हो , stdout, stderr। आश्चर्यजनक रूप से, हालांकि एडोब ने स्थानीय फ़ाइल एआईआर में पहुंच के लिए समर्थन जोड़ा, उन्होंने इन मानक फ़ाइल पाइप के साथ बातचीत को छोड़ दिया है (फिर भी वे किसी भी ओएस मंच पर पाए जाते हैं जो एआईआर का समर्थन करता है)। AMF वस्तुओं का आदान प्रदान के माध्यम से ऐसा आकाशवाणी (या जावा या किसी भी AMF सक्षम भाषा) क्षुधा कर सकते हैं इंटरप्रोसेस संवाद -
- stdin से अधिक AMF का समर्थन, stdout, stderr को लागू करें। इससे एआईआर में माइक्रोसॉफ्ट के पावरशेल का एक स्पर्श जोड़ देगा।
वर्तमान में मेरापी जावा के साथ एएमएफ पुल प्रदान करता है, जिससे इसकी प्रभावकारिता प्रदर्शित होती है। हां, मेरापी को इंटरप्रोसेस संचार करने के लिए स्थानीयहोस्ट बंदरगाह और सॉकेट का उपयोग करना पड़ता है - जो इसके बजाय stdin/stdout/stderr इंटरप्रोसेस पाइप का उपयोग करने के सापेक्ष जाने के लिए एक बेकार तरीका है।
वर्तमान में मेरे जावा डेवलपर्स में से एक जावा "बूट-स्ट्रैप" प्रोग्राम लिख रहा है जो हमारे एआईआर ऐप को बाल प्रक्रिया के रूप में लॉन्च करता है और फिर एआरआईपी संदेश को मेरपी को लूपबैक सॉकेट पर एआईआर ऐप में संचारित करता है। सी प्रोग्राम अभी भी एआईआर ऐप से बात करने के लिए मेरापी जैसी दृष्टिकोण का उपयोग करेगा। – RogerV
लेकिन यदि सी प्रोग्राम एआईआर रनटाइम साझा लाइब्रेरी इन-प्रोसेस लोड करना था, जो स्मृति उपयोग, ऐप लॉन्चिंग की गति इत्यादि के मामले में चीजों को थोड़ा हल्का कर देगा। सामान्य में जावा से छुटकारा पा सकता है - हमारे मामले में हमें ओरेकल फॉर्म जावा एप्लेट चलाने की जरूरत है। लेकिन जावा जेवीएम-प्रो-लोड लोड करना आसान है। – RogerV