Я пытаюсь запустить вторую исполняемую программу из программы С#. Это мой текущий код:
Process p = new Process();
p.StartInfo.FileName = System.Windows.Forms.Application.StartupPath + "\\HASy-Diag.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.Arguments = "git-synchro " + args[1];
p.StartInfo.UseShellExecute = false;
p.Start();
Но вот в чем загвоздка: я хочу выйти из своей программы сразу после того, как запустил второй exe.
Дело в том, что мне нужно выполнить некоторую асинхронную работу, которая не может находиться в том же процесс, что и программа. Обратите внимание, что это должно быть в другом процессе, а не в другом потоке. Причина в том, что я хочу поработать рядом со сборкой из IDE. Выполнение команд до и после сборки реализовано в этой среде IDE. IDE (здесь Keil) ждет, пока процесс предварительной сборки не завершится (вот почему я должен его остановить), а затем начинает сборку.
Я хочу получить информацию, пока IDE создает проект (чтобы существенно сэкономить время). Итак, я хочу начать новый процесс из процесса.
это возможно? Любой процесс, с которого я начинаю, затем приведенный выше код не выполняется, если вы выходите из полной программы. Этот код выполняется только в том случае, если в коде есть p.waitForExit().
Как выйти из текущей программы?
Помимо того, что уже упоминали другие комментаторы, что, если вы попытаетесь запустить «безобидную» программу, такую как notepad.exe? Будет ли он выполняться, даже если вы выйдете из своей программы сразу после ее запуска? (Это попытка выяснить, имеет ли HASy-Diag.exe какое-то странное взаимодействие/зависимость с вашей запущенной программой...)
была полностью моя вина, были некоторые ошибки в коде, решение не имеет ничего общего с этим процессом, а с отладкой моего другого кода





Используйте p.WaitForExit с параметром - передать 0 миллисекунд, поэтому ваше приложение не будет ждать, а продолжит работу в обычном режиме:
p.WaitForExit(0);
Этот метод возвращает true, если процесс завершился, и false, если он еще продолжается, но в вашем случае это не имеет значения.
Это должно работать нормально. Что произойдет, если вы вставите
Thread.Sleep(1000)послеProcess.Start?