2013-01-07 13 views
6

संभव डुप्लिकेट:
Load an EXE file and run it from memory using C#मेमोरी से डाउनलोड की गई फ़ाइल को कैसे चलाएं?

मैं एक वेब सर्वर से एक .exe डाउनलोड करने के लिए WebClient वर्ग का उपयोग कर रहा हूँ। क्या कोई तरीका है कि मैं इसे पहले डिस्क पर सहेजे बिना .exe चला सकता हूं?

पूर्णता के उद्देश्य के लिए मुझे आपको दिखाएं कि अब तक मेरे पास क्या है।

यहाँ कोड मैं डाउनलोड शुरू करने के लिए उपयोग करते हैं:

WebClient webClient = new WebClient(); 
webClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(webClient_DownloadDataCompleted); 
webClient.DownloadDataAsync(new Uri("http://www.somewebsite.com/calc.exe")); 

और (webClient_DownloadDataCompleted) विधि में मैं बस से पैरामीटर ई बाइट्स हड़पने:

private void webClient_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e) 
{ 
    Byte[] downloadedData = e.Result; 
    // how to run this like a .exe? 
} 

धन्यवाद।

+0

यह एक .NET exe है? –

+0

मुझे यकीन नहीं है। मेरा प्रोग्राम .exe के प्रकार के बारे में कोई धारणा नहीं बना सकता है। –

+0

जेनेरिक केस स्पष्टीकरण के साथ डुप्लिकेट द्वारा कवर किया गया है क्यों आपको डिस्क से स्टोर और चलाने की आवश्यकता है। –

उत्तर

2

यदि आपका .exe एक .NET प्रोग्राम है, तो आप load an assembly and run its entry point कर सकते हैं।

अन्यथा, there are ways to do it के दौरान, मैं अस्थायी निर्देशिका में फ़ाइल को सहेजने और वहां से चलने में समस्या को देख नहीं सकता जो बहुत कम दर्दनाक है।

+0

हां। इसे सिस्टम अस्थायी निर्देशिका में सहेजना शायद मैं कर रहा हूं। –

+0

@ जेन: यदि आपके पास ऐसा विकल्प है, तो निश्चित रूप से इसके साथ जाएं। एक मनमानी पीई फ़ाइल चलाना कोई आसान बात नहीं है जैसा आप देख सकते हैं। –

1

इस धागे को देखें। मुझे लगता है कि आप VirtualAlloc

Is it possible to execute an x86 assembly sequence from within C#?

साथ इसे हल कर सकते हैं अपने बाइट सरणी शामिल एक नेट विधानसभा आप ऐसा करने में सक्षम होना चाहिए:

Assembly assembly = AppDomain.Load(byteArray) 
Type typeToExecute = assembly.GetType("ClassName"); 
Object instance = Activator.CreateInstance(typeToExecute); 
संबंधित मुद्दे