2009-02-21 15 views
6

में एम्बेडेड एक * .exe किसी को पता है कि मैं एक exe फ़ाइल को एक डीएल में कैसे एम्बेड कर सकता हूं?एक डीएल

मेरे पास एक उपकरण है जो एक exe फ़ाइल है जिसे मैं सी # कोड से कॉल करता हूं।

बात यह है कि मैं इस उपकरण (exe फ़ाइल) युक्त 1 डीएल और डीएल कोड को containg करना चाहता हूं।

क्या यह एक्सई फ़ाइल संसाधनों के भीतर एम्बेड करना संभव है?

अग्रिम में Thx

+0

मैंने "एम्बेडेड" टैग हटा दिया क्योंकि यह प्रश्न वास्तव में एम्बेडेड सिस्टम से संबंधित नहीं है। –

उत्तर

9

ज़रूर यह है। संसाधन में संसाधन में आप आरसी_DATA के रूप में कोई भी फाइल जोड़ सकते हैं। लेकिन मेरा मानना ​​है कि इसे कॉल करने से पहले आपको डिस्क पर इसे निकालने की आवश्यकता होगी!

आप कौन सी आईडीई/भाषा का उपयोग कर रहे हैं?

[संपादित करें]

क्षमा करें! आपने उल्लेख किया है कि आप सी # का उपयोग कर रहे हैं।

  1. आप आवेदन करने के लिए एक संसाधन फ़ाइल जोड़ें (सही IDE में आवेदन क्लिक करें और "नया आइटम जोड़ें"।
  2. उपयोग किसी मौजूदा फ़ाइल को जोड़ने के लिए संसाधन संपादक में उपकरण पट्टी।
  3. फिर exe जब भी निकालने System.IO.File.WriteAllBytes (@ "C: \ MyEXE \", Resource1.MyEXE) जैसे कोड कुछ फोन करके आवश्यक;
+1

नियम, छोड़कर, आप एक बाइट [] से एक असेंबली लोड कर सकते हैं, इसलिए फ़ाइल बनाने की कोई आवश्यकता नहीं है। – leppie

+0

वही नियम चला जाता है, .... (ओप्स टाइपो) – leppie

+0

thx आपके उत्तर के लिए तो फिनली, मुझे फाइल सिस्टम पर इसे फिर से निष्पादित करने के लिए लिखना होगा? ऐसा करने के बिना इसे निष्पादित करने की कोई संभावना नहीं है? – GillouX

7

यह ध्यान रखें कि आपके उपयोग करता है भी नहीं हो सकता है में baring लायक है ऐसा करने के बारे में आप खुश हैं। निष्पादन योग्य को एम्बेड करना कि उन्हें एक डीएलएल में कोई नियंत्रण नहीं मिला है जिसे आप निकालेंगे और चलाएंगे, शायद लोगों को उनकी मशीन पर ट्रोजन चलाने के बारे में चिंता होगी।

फाइल सिस्टम में .EXE को छोड़ना बेहतर है और आपका एप्लिकेशन क्या कर रहा है इसके बारे में पारदर्शी होना बेहतर है।

+5

यह वास्तव में एक वैध चिंता नहीं है। यदि कोई उपयोगकर्ता मेरा डीएलएल चला रहा है तो वे स्पष्ट रूप से मुझ पर भरोसा करते हैं। इसके अलावा आपने कभी भी उपयोग किए गए एप्लिकेशन द्वारा लॉन्च किए गए सभी सहायक अधिकारियों को देखा है? – tster

2

आप एक बाइट [] से एक असेंबली लोड कर सकते हैं। यह एक एम्बेडेड संसाधन के ManifestResourceStream के माध्यम से प्राप्त किया जा सकता है।

1

एक विकल्प हो सकता है कि .exe को एम्बेड न करें, बल्कि डीएलएल में इसकी कार्यक्षमता शामिल करें, और इसे निष्पादित करने के लिए rundll32 [1] का उपयोग करें।

+0

यह मेरी पसंद भी होगी ... जब तक कि मैं इसे पुराना नया थिंग पोस्ट नहीं पढ़ता: [rundll32 का उपयोग कब करें? आसान: इसका उपयोग न करें] (http://blogs.msdn.com/b/oldnewthing/archive/2013/01/04/10382242.aspx) –

+0

@ व्लाक्लावस्कीक: लिंक टूटा हुआ; [यहां नया है] (https://blogs.msdn.microsoft.com/oldnewthing/20130104-00/?p=5643)। – hydroiodic

-1

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

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

एक अन्य विकल्प है, और अपनी परियोजना के विवरण जानने नहीं, एक अलग नज़रिए के साथ इस ले: करने के लिए एक .exe.readme फ़ाइल जोड़ने के अपने स्थापित है कि किसी भी उत्सुक उपयोगकर्ताओं के लिए का वर्णन करता है या आईटी लोग क्यों एक निष्पादन योग्य वे नहीं थे है स्थापना निर्देशिका में उम्मीद नहीं कर रहा है :)

+0

यह एक ... दिलचस्प रूप से डीईपी का भ्रमित विवरण है। नहीं, डीईपी सचमुच जादुई रूप से ऑन-डिस्क एक्जिक्यूटिव को संसाधन फोर्क से आने के रूप में टैग नहीं करेगा और इसलिए निष्पादन योग्य नहीं होगा। और नहीं, डीईपी कुछ भी "पहचानने" की कोशिश नहीं करता है। इसके बजाए, यह स्मृति पृष्ठों को निष्पादन योग्य या निष्पादन योग्य के रूप में टैग करने के लिए एक तंत्र है। –