2009-01-31 17 views
5

से इन-प्रोसेस साझा लाइब्रेरी के रूप में एआईआर रनटाइम को कैसे लोड कर सकता हूं, मैं 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 इंटरप्रोसेस पाइप का उपयोग करने के सापेक्ष जाने के लिए एक बेकार तरीका है।

उत्तर

2

क्या मेरे सवाल करने के लिए (अब तक किसी भी संभावित वाणिज्यिक उपयोग के रूप में) पता चला है एडोब द्वारा प्रतिबंधित किया जा करने के लिए प्रयास समक्ष रखी: Adobe® AIR™ Runtime Distribution FAQ से

:

वितरित करें या एडोब आकाशवाणी क्रम का उपयोग , इंस्टॉलर फाइलें, या अनियंत्रित तरीके या उद्देश्य में इंस्टॉलर फ़ाइलों को निकाला गया। उदाहरण के लिए, आप वितरण नहीं कर सकते, सीधे कॉल, या एडोब आकाशवाणी पुस्तकालयों या क्रम घटकों अपने सॉफ्टवेयर अनुप्रयोग भीतर से किसी के लिए लिखने रैपर। Runtime.dll, रनटाइम एक्जिक्यूटिव, template.exe, और template.app रनटाइम घटक के उदाहरण हैं।

2

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

  • F-IN-BOX मैक्रोमीडिया फ़्लैश प्लेयर ActiveX सुविधाओं को बढ़ाने के लिए एक डेवलपर की लाइब्रेरी है। यह फिल्मों को प्रदर्शित करने के लिए अपने इंजन का उपयोग नहीं करता है बल्कि इसके बजाय आधिकारिक swflash.ocx/flash.ocx कोड के चारों ओर एक रैपर प्रदान करता है।
  • How to embed Flash Player ActiveX using BoxedApp SDK

आप भी कम स्तर तक पहुँच प्राप्त करना चाहते हैं, तो आप खुले स्रोत Tarmain AS3 VM एम्बेड कर सकता है। कोड में "avmshell" नामक एक उदाहरण कमांड लाइन खोल है। यदि आप Tamarin VM स्वयं बनाते हैं, तो आप मूल C++ में लागू नई एक्शनस्क्रिप्ट कक्षाएं जोड़ सकते हैं। Tamarin (और फ़्लैश प्लेयर) एएस और सी ++ के बीच इस "एवीएम गोंद" का उपयोग कर अपनी कई विशेषताओं को लागू करते हैं।

+0

वर्तमान में मेरे जावा डेवलपर्स में से एक जावा "बूट-स्ट्रैप" प्रोग्राम लिख रहा है जो हमारे एआईआर ऐप को बाल प्रक्रिया के रूप में लॉन्च करता है और फिर एआरआईपी संदेश को मेरपी को लूपबैक सॉकेट पर एआईआर ऐप में संचारित करता है। सी प्रोग्राम अभी भी एआईआर ऐप से बात करने के लिए मेरापी जैसी दृष्टिकोण का उपयोग करेगा। – RogerV

+0

लेकिन यदि सी प्रोग्राम एआईआर रनटाइम साझा लाइब्रेरी इन-प्रोसेस लोड करना था, जो स्मृति उपयोग, ऐप लॉन्चिंग की गति इत्यादि के मामले में चीजों को थोड़ा हल्का कर देगा। सामान्य में जावा से छुटकारा पा सकता है - हमारे मामले में हमें ओरेकल फॉर्म जावा एप्लेट चलाने की जरूरत है। लेकिन जावा जेवीएम-प्रो-लोड लोड करना आसान है। – RogerV

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