Проблема с запуском EXE с Windows Forms через Process.Start() в DLL, динамически загружаемой консольным приложением.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с запуском EXE с Windows Forms через Process.Start() в DLL, динамически загружаемой консольным приложением.

Сообщение Anonymous »

Название:
Проблема запуска 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);
Код DLL (соответствующий фрагмент):

Код: Выделить всё

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.
Вопрос: Есть ли какие-либо ограничения или особые настройки при использовании Process.Start() в DLL, загружаемой через Reflection, которые предотвращали бы появление окна EXE-файла с Windows Forms? Как обеспечить правильную работу 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»