.NET 4.x Ошибки при запуске EXE из ресурса - C#

Узнай цену своей работы

Формулировка задачи:

Имеется WinForms приложение (Test.exe) у которого в ресурсах "WindowsFormsApplication1.exe". Ресурс помечен как "Внедренный". Программа в ресурсах - пустой проект Winforms (только форма и кнопка без обработчика). Используется распространенный код:
private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            RunInternalExe("WindowsFormsApplication1.exe");
        }
private static void RunInternalExe(string exeName)
        {
            //Get the current assembly
            Assembly assembly = Assembly.GetExecutingAssembly();
 
            //Get the assembly's root name
            string rootName = assembly.GetName().Name;
 
            //Get the resource stream
            Stream resourceStream = assembly.GetManifestResourceStream(rootName + "." + exeName);
 
            //Verify the internal exe exists
            if (resourceStream == null)
                return;
 
            //Read the raw bytes of the resource
            byte[] resourcesBuffer = new byte[resourceStream.Length];
 
            resourceStream.Read(resourcesBuffer, 0, resourcesBuffer.Length);
            resourceStream.Close();
 
            //Load the bytes as an assembly
            Assembly exeAssembly = Assembly.Load(resourcesBuffer);
 
            //Execute the assembly
            exeAssembly.EntryPoint.Invoke(null, null); //no parameters
        }
При попытке запустить EXE из ресурса вываливается с ошибкой: "TargetInvocationException" на строчке
exeAssembly.EntryPoint.Invoke(null, null);
Подскажите пожалуйста, где ошибка и как её исправить?

Решение задачи: «.NET 4.x Ошибки при запуске EXE из ресурса»

textual
Листинг программы
private void button1_Click(object sender, EventArgs e)
        {
        this.Hide();
        Thread t = new Thread(new ParameterizedThreadStart(RunInternalExe));
        t.Start("RunCodeFromDll.exe");
 
        //RunInternalExe("RunCodeFromDll.exe");
        }
    static void RunInternalExe(object tempName)
        {
        string exeName = tempName.ToString();
        //Get the current assembly
        Assembly assembly = Assembly.GetExecutingAssembly();
 
        //Get the assembly's root name
        string rootName = assembly.GetName().Name;
 
        //Get the resource stream
        Stream resourceStream = assembly.GetManifestResourceStream(rootName + "." + exeName);
 
        //Verify the internal exe exists
        if (resourceStream == null)
            return;
 
        //Read the raw bytes of the resource
        byte[] resourcesBuffer = new byte[resourceStream.Length];
 
        resourceStream.Read(resourcesBuffer, 0, resourcesBuffer.Length);
        resourceStream.Close();
 
        //Load the bytes as an assembly
        Assembly exeAssembly = Assembly.Load(resourcesBuffer);
 
        //Execute the assembly
        exeAssembly.EntryPoint.Invoke(null, null); //.EntryPoint.Invoke(null, null); //no parameters
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы