Как мне запустить процесс из моей программы и контролировать его в Visual Studio? - PullRequest
1 голос
/ 14 декабря 2011

Чтобы запустить другой экземпляр моей программы, я сделал что-то вроде:

private void button1_Click(object sender, EventArgs e)
{
    Process p = new Process();
    p.StartInfo.FileName = Application.ExecutablePath;
    p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    p.Start();
}

И обнаружил, что остановка отладчика не остановила новое окно, только первое (запускаемое) окно.

Как программно сделать так, чтобы новый процесс находился "под" VS?

Ответы [ 5 ]

2 голосов
/ 14 декабря 2011

Этот процесс, который вы получаете, имеет дескриптор запущенного процесса.Вы можете сохранить это в переменной-члене, а не в локальной переменной, и при закрытии формы убить процесс.

http://msdn.microsoft.com/en-us/library/e8zac0ca.aspx

2 голосов
/ 14 декабря 2011

Вы можете Изменить действие запуска для отладки приложений

  1. Щелкните правой кнопкой мыши по вашему проекту
  2. Свойства
  3. Debug
  4. Запустить внешнюю программу

И установите программу, которую вы хотите запустить.

Если вы хотите присоединить к другому экземпляру программным способом, дубликат вопроса можно найти здесь:

Который ссылается на эту статью:

1 голос
/ 14 декабря 2011

Поскольку вы запускаете собственную программу во второй раз, вы знаете, что это графический интерфейс.Вы можете хранить ссылку Process и вызывать CloseMainWindow (или Kill) для каждого из них в обработчике событий FormClosing:

private List<Process> children = new List<Process>();

private void button1_Click(object sender, EventArgs e)
{
    Process p = new Process();
    p.StartInfo.FileName = Application.ExecutablePath;
    p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    p.Start();

    children.Add(p);
}

private Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    foreach (Process p in this.children)
    {
        // posts WM_CLOSE to the main handle of the process
        // which allows a graceful exit, as if the user clicked [X]
        p.CloseMainWindow();
        // p.Kill(); // less graceful, just kill
    }
}
0 голосов
/ 14 декабря 2011

Если под «под VS» вы подразумеваете, что Visual Studio может отлаживать внешний процесс, вы можете рассмотреть стратегию «Присоединение к процессу».

http://msdn.microsoft.com/en-us/library/c6wf8e4z.aspx

0 голосов
/ 14 декабря 2011

Отладка -> Присоединить к процессу и выберите ваш процесс из списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...