.NET 4.x Ошибки при запуске EXE из ресурса - C#
Формулировка задачи:
Имеется WinForms приложение (Test.exe) у которого в ресурсах "WindowsFormsApplication1.exe". Ресурс помечен как "Внедренный". Программа в ресурсах - пустой проект Winforms (только форма и кнопка без обработчика). Используется распространенный код:
При попытке запустить EXE из ресурса вываливается с ошибкой:
"TargetInvocationException" на строчке
Подскажите пожалуйста, где ошибка и как её исправить?
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
}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
}