Проблема запуска EXE-файла с Windows Forms через Process.Start() в DLL, динамически загружаемой консольным приложением (C#, .NET Framework 4.5.2)Описание:
Я разрабатываю консольное приложение на C# (.NET Framework 4.5.2), которое динамически загружает DLL (также разработанную мной) с помощью Reflection. Внутри этой DLL есть метод, который использует Process.Start() для запуска EXE-файла, содержащего интерфейс Windows Forms. Однако когда я вызываю этот метод через Reflection, EXE-файл запускается, но интерфейс Windows Forms не появляется.
Код консольной программы:
Код: Выделить всё
// Example of the code that loads the DLL
Assembly assembly = Assembly.LoadFrom("MyDLL.dll");
Type type = assembly.GetType("MyNamespace.MyClass");
MethodInfo method = type.GetMethod("MyMethod");
object instance = Activator.CreateInstance(type);
method.Invoke(instance, null);
Код: Выделить всё
public class MyClass
{
public void MyMethod()
{
// Processing before starting the EXE
var startExe = new ProcessStartInfo();
startExe.FileName = "PathToMyExecutable.exe";
startExe.Arguments = "\"arg1\" \"arg2\" \"arg3\"";
startExe.WindowStyle = ProcessWindowStyle.Hidden;
startExe.CreateNoWindow = true;
Process.Start(startExe);
}
}
- Код DLL выполняется правильно (я проверил с помощью журнала сообщений), исполняемый файл запускается, но окно EXE-файла с интерфейсом Windows Forms не появляется при вызове метода через Reflection консольной программой.
- Я не получаю никаких исключений или ошибки, окно просто не появляется.
- Я исследовал несколько решений, и некоторые упоминали использование ProcessStartInfo с параметрами UseShellExecute или CreateNoWindow, но это не решило проблему.
- Я тестировал вызов EXE-файла вне сценария отражения (непосредственно из другого контекста), и интерфейс Windows Forms EXE-файла отображается нормально.
- Я также протестировал загрузку той же DLL из программы, отличной от .NET (например, C/C++), и EXE-файл и его окно отображаются правильно, поэтому я подозреваю, что проблема связана с использованием Reflection в консольном приложении.
- Проект Консоли не может иметь прямую ссылку на длл. DLL загружается динамически через Reflection.
- Консольное приложение не должно заранее знать о DLL или EXE.
Дополнительная информация:
- .NET Framework 4.5.2
- DLL загружается, ее методы выполняются без ошибок, EXE-файл запускается, но окно Windows Forms не появляется..NET Framework 4.5.2
- DLL загружается, ее методы выполняются без ошибок, EXE-файл запускается, но окно Windows Forms не появляется.
Я уже пробовал установить ProcessStartInfo с различными параметрами, такими как UseShellExecute = true, WindowStyle = ProcessWindowStyle.Normal, но безуспешно.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ed-dynamic