Закрытие запускается из приложения Windows при закрытии приложения или выходе - PullRequest
1 голос
/ 03 января 2012

Я работаю над приложением Windows. мне нужно запустить какой-нибудь оконный exe из моего приложения, я могу сделать то же самое, но когда я закрываю свое приложение, этот exe остается в рабочем состоянии, я не понимаю, как я могу закрыть эти exe Пожалуйста, предложите несколько советов.

Для запуска процесса

 private void StartChildProcess(string fileName)
    {
        Process newProcess = new Process();
        newProcess.StartInfo = new ProcessStartInfo(fileName); ;
        newProcess.Start();
        localProcess.Push(newProcess);
    }

Чтобы закрыть процесс

 private void CloseStartedProcesses()
    {
        while (localProcess.Count > 0)
        {
            Process process = localProcess.Pop();
            if (process != null && !process.HasExited)
            {
                process.CloseMainWindow();
                process.Close();
            }
        }
    }

Ответы [ 5 ]

1 голос
/ 03 января 2012

Попробуйте это:

Process[] p = Process.GetProcessesByName("osk");
foreach (var item in p)
{
    item.Kill();
}
1 голос
/ 03 января 2012

Использовать Windows API - P / Invoke. FindWindow() или EnumWindows(), чтобы получить дескриптор окна. Затем вы можете отправить WM_CLOSE или WM_QUIT для завершения приложения с помощью функции SendMessage().

Обратите внимание, что если приложение проверяет пользовательский ввод при выходе (например, MessageBox запрашивает погоду, которую пользователь действительно хочет закрыть), единственной опцией может быть отправка WM_DESTROY, которая будет эквивалентна Process.Kill (по крайней мере, в отношении к потере данных - я не уверен, что это абсолютный эквивалент).

1 голос
/ 03 января 2012

Некоторые опции:

  • Настройте некоторую систему связи, чтобы основное приложение могло предупреждать другое приложение о завершении работы (чтение информации о WCF или удаленное взаимодействие)
  • Создайте файл do.shutdown и позвольте второму приложению проверить, существует ли этот файл, просто, но эффективно.
  • Используйте процесс. Варианты убийства
  • Используйте Sendkey или эквивалентный ключ, чтобы отправить комбинацию клавиш 'quit'
0 голосов
/ 03 января 2012

попробуйте этот Process proc = Process.GetProcessesByName ("имя процесса");proc.Kill ();

0 голосов
/ 03 января 2012

Причина, по которой EXE-файл, запущенный вами из вашего приложения, не закрывается после закрытия приложения, возможно, заключается в том, что второе приложение запускается как РАЗНЫЙ, ОТДЕЛЬНЫЙ процесс.

Если вы запускаете другой процесс сSystem.Diagnostics.Process, он останется в фоновом режиме, пока не будет завершен вручную или пока не завершит свою работу.

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