У меня есть два приложения WinForms NET «Test.exe», в которых находится ресурс «WindowsFormsApplication1.exe». Ресурс помечен как «встроенный». Ресурс программы - пустой проект Winforms (только форма и кнопка без обработчика). Используйте общий код в «TEST.exe»:Ошибка при запуске EXE из ресурса
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);
Предоставьте более подробную информацию об исключении. Каково полное сообщение? Вы можете показать трассировку стека? Имеет ли это внутреннее исключение? – Renan
Извините за перевод, у меня есть russain VS. Внутренний вывод - «Перед созданием первого объекта IWin32Window приложение должно вызвать SetCompatibleTextRenderingDefault». Может быть, это связано с совпадением имен? Например, «Program.cs» в обеих программах. – streamdown
Фактически сообщение об исключении уже приводит вас к решению. Я не думаю, что это проблема с именем, я думаю, вам следует искать решение, которое связано с методом SetCompatibleTextRenderingDefault. – Renan