Запуск приложения как поток и не процесс

Некоторое время назад я задал вопрос на здесь о том, как запустить приложение как поток в пространстве памяти другого приложения, скорее затем новый процесс: Выполнение программы как поток и не как процесс

Как следование до того вопроса, я думаю, что у меня есть теория о том, как я мог бы сделать это для достигания того, что это, я пытаюсь сделать. Прежде всего позвольте мне сказать, причина, которую я делаю, это вызвано тем, что я пытаюсь создать приложение испытательного стенда, которое может "протестировать" другие приложения, но управлять ими поэтому, если они получают исключение, мое приложение испытательного стенда может закончить поток и restrart она автоматически.

Моя теория о том, как сделать это, должна создать интерфейс, названный ITestBed, например, и иметь основной класс в моей реализации приложения это. Реализация будет содержать один метод, TestApp (), например. Все, что я должен сделать из своего приложения испытательного стенда, является вызовом, этот метод и этот метод на стороне приложения могут просто зеркально отразить конструктора моего текущего объекта? Это будет работать?

По существу то, что я пытаюсь сделать, имитируют, как Visual Studio работает. При установке точки останова в программе, хит для запуска приложения в Visual Studio, приложение работает как ребенок приложения Visual Studio. Для тестирования этого Вы могли закончить приложение Visual Studio, и Ваше приложение также закончится. Как я могу достигнуть этого?

1
задан Community 23 May 2017 в 10:31
поделиться

1 ответ

Вам не нужно запускать его как отдельный поток.

Когда вы используете Process.Start для запуска процесса, это дочерний процесс текущего приложения.

Просто следите за событием Process.Exited (убедитесь, что для параметра EnableRaisingEvents установлено значение true), и используйте его, чтобы увидеть, когда процесс завершится. Затем вы можете автоматически перезапустить процесс на этом этапе.


Моя теория о том, как это сделать, заключается в создании интерфейса, например ITestBed, и реализации его в основном классе в моем приложении. Реализация будет содержать один метод, например, TestApp (). Все, что мне нужно сделать из моего тестового приложения, - это вызвать этот метод, и этот метод на стороне приложения может просто отражать конструктор моего текущего объекта? Это сработает?

Это сработает. Вы можете загрузить основную сборку exe через отражение и построить основной объект, а затем вызвать свой метод. Однако это делает процесс частью вашего текущего приложения, поэтому у него есть некоторые побочные эффекты. В этой ситуации вы разделяете пространство памяти процесса.

Если вы это сделаете, вы можете изучить Домены приложений. Загрузив и «запустив» свою реализацию ITestBed в отдельном домене приложений, вы защитите свое основное приложение.

2
ответ дан 2 September 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: