Вам понадобится
  • - Microsoft Visual Studio.
Инструкция
1
Импортируйте пространства имен System, System.Diagnostics и System.Threading. В начало модуля добавьте следующие строки кода:

Imports System
Imports System.Diagnostics
Imports System.Threading

Это нужно просто для удобства использования компонентов, относящихся к данным пространствам имен.
2
Получите данные процесса, который необходимо закрыть. Используйте объект класса System.Diagnostics.Process. Объявите переменную данного класса:

Dim oProc As Process

Затем используйте какой-либо метод для нахождения необходимого процесса.
3
Если программа, которую в дальнейшем необходимо будет закрывать, запускается разрабатываемым приложением, то просто сохраните объект, возвращаемый методом Start при запуске:

oProc = Process.Start("app.exe")
4
Если необходимо закрыть процесс с известным идентификатором, используйте статический метод GetProcessById класса Process для получения соответствующего объекта:

oProc = Process.GetProcessById(nID)

Здесь nID – числовой идентификатор процесса.
5
Если известны только некоторые характеристики целевого процесса, произведите его поиск. Получите список процессов, запущенных на локальной машине, в виде массива объектов класса Process. Используйте методы GetProcesses (возвращает все процессы) или GetProcessesByName (только процессы с заданным именем):

Dim aoAllProcesses As Process() = Process.GetProcesses()
Dim aoProcsByName As Process() = Process.GetProcessesByName("app.exe")

Перечислите объекты массива при помощи цикла:

Dim oProc As Process
For Each oProc In aoAllProcesses
' действия над oProc
Next

В цикле анализируйте свойства MainModule, MainWindowTitle, ProcessName, и т.д. для нахождения нужного объекта.
6
Попытайтесь завершить программу при помощи отсылки сообщения закрытия ее главному окну. Вызовите метод CloseMainWindow объекта, соответствующего целевому процессу. При необходимости произведите ожидание завершения приложения путем вызова WaitForExit, например:

oProc.CloseMainWindow()
oProc.WaitForExit()

Данный метод не гарантирует завершения программы, поскольку сообщение закрытия окна часто обрабатывается и может быть проигнорировано.
7
При необходимости гарантированного завершения программы после вызова CloseMainWindow осуществите ожидание в течение небольшого промежутка времени. Используйте метод Sleep класса Thread. Затем проверьте состояние процесса, проанализировав свойство HasExited и, если он не завершен, вызовите метод Kill:

Thread.Sleep(6000)
oProc.Refresh()
If not oProc.HasExited Then
    oProc.Kill()
End If

При желании можно осуществлять опрос состояния процесса в цикле, выдавая периодические запросы пользователю о необходимости завершения приложения без сохранения данных. И только в случае согласия вызвать Kill.
8
Освободите системные ресурсы после завершения программы при помощи метода Close:

oProc.Close()
9
Для того чтобы избежать непредвиденных ошибок во время исполнения приложения, поместите весь алгоритм закрытия программы в блок Try-Catch-End Try. При необходимости реализуйте полноценную обработку исключений с выводом диагностических сообщений.