2010-03-04 13 views
7

में एक EXE फ़ाइल एम्बेड करें मुझे पता है कि यह अजीब स्थिति है, लेकिन मुझे अपनी परियोजना में एक EXE फ़ाइल (या असेंबली कोड) एम्बेड करने की आवश्यकता है, इसलिए इसे केवल एप्लिकेशन द्वारा ही शुरू किया जा सकता है (यह कर सकता है फाइल सिस्टम में EXE नहीं बनाते हैं और इसे शुरू करते हैं) ....NET: मेरी प्रोजेक्ट

क्या यह संभव है?

संपादित करें:

यह .NET EXE नहीं है। वैसे भी मैं अपनी परियोजना के लिए एक संसाधन के रूप Test.exe फ़ाइल जोड़ा गया है और मैं इस

Dim exestr As Stream = Nothing 
    Dim a As Assembly = Assembly.GetExecutingAssembly 
    exestr = a.GetManifestResourceStream("Test.exe") 
+0

यह संभव नहीं है। आप ऐसा करने की कोशिश क्यों कर रहे हैं? – SLaks

उत्तर

2

मैं सोच रहा हूं कि RAM disk, अपनी .NET संसाधन फ़ाइल से अपनी exe फ़ाइल/एस लिखें, और वहां फ़ाइल निष्पादित करें। भौतिक डिस्क को कुछ भी छूता नहीं है।

मेरे पास प्रोग्राम करने योग्य रैम डिस्क एपीआई के लिए कोई लिंक नहीं है लेकिन आप शायद अपने प्रोग्राम से छेड़छाड़ करने के लिए कुछ ढूंढ सकते हैं। दूसरा लाभ यह है कि वायरस स्कैनर अभी भी सुरक्षा के लिए इसे स्वीकार कर सकते हैं।

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

+0

धन्यवाद, मैं कोशिश करता हूं, काम करने की आशा करता हूं ... वैसे भी मैं फ़ाइल लिखना और खोलना नहीं चाहता क्योंकि उपयोगकर्ताओं को दूसरी प्रतिलिपि नहीं लेनी चाहिए exe और जब वे चाहते हैं शुरू होता है। – Marcx

+0

क्या यह अंत में एक राम डिस्क समाधान था? बस उत्सुक। यदि ऐसा है तो आप इसे लागू करने के लिए किस सॉफ्टवेयर का उपयोग करते थे? –

+0

मुझे लगता है कि इसके साथ समस्या यह है कि रैम डिस्क के लिए पहले से ही स्थापित होने के लिए तृतीय पक्ष सॉफ़्टवेयर की आवश्यकता होती है। यदि आप ऐसा कर सकते हैं तो आप फाइल सिस्टम को क्यों नहीं लिख सकते? – jcmcbeth

4

किया EXE एक नेट विधानसभा है, तो आप अपने (बाह्य) कार्यक्रम में संकलित बाइनरी एम्बेड कर सकते हैं, का उपयोग कर इसे लोड Assembly.Load(byte[])संपादित करें: चूंकि यह नहीं है, आप नहीं कर सकते।

असेंबली लोड करने के बाद, आप किसी अन्य असेंबली की तरह आंतरिक असेंबली (जैसे Main विधि) से फ़ंक्शंस कॉल कर सकते हैं, या आप AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName) लिख सकते हैं।

+0

पहली पोस्ट अपडेट की गई ... exe नहीं है .Net exe .. – Marcx

+0

मैं इस उत्तर को संदर्भ के लिए रखूंगा। उपयोगी जानकारी के लिए – SLaks

+0

+1। – si618

5

संभव नहीं है। यह डेव कटलर द्वारा बनाया गया एक मूल डिजाइन निर्णय था और जब उन्होंने विंडोज एनटी डिजाइन किया था। एक प्रक्रिया फ़ाइल सिस्टम पर एक फ़ाइल द्वारा समर्थित होना चाहिए। वर्चुअल मेमोरी में प्रक्रिया के कोड को मैप करने के लिए विंडोज मेमोरी मैप की गई फाइल का उपयोग करता है। यह एक .NET प्रोग्राम के लिए अलग नहीं है, भले ही उसके बहुत सारे कोड को जेआईटी स्मृति में संकलित किया जाता है। आईएल युक्त असेंबली उसी तरह मैप हो जाती है।

केवल कुशल ऑपरेटिंग सिस्टम ऑपरेशन से अधिक के लिए अच्छा है, उपयोगकर्ता और वायरस स्कैनर वास्तव में निष्पादन योग्य कोड को कहीं से बाहर नहीं निकालते हैं।

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