Теперь вы используете Process.GetProcessesByName () для получения массива запущенных процессов, если таковые имеются.
Вы можете использовать возвращенный массив процессов и подписаться на событие Exited каждого из них, чтобы регистрировать время выхода любого из процессов в массиве.
Настройка EnableRaisingEvent необходима для вызова события Exited
, но вам также необходимо подписаться на событие, используя AddHandler
вместе с адресом метода или лямбда-выражения:
AddHandler [Process].Exited, AddressOf [Handler]
' or
AddHandler [Process].Exited, Sub() [Lambda]
Этот метод принимает имя процесса и путь к файлу, в котором хранится имя процесса и время его выхода при возникновении события Exited
.
Если ваш текущий цикл:
For Each row As DataRow In table.Rows
'(...)
Next
Вы можете вставить вызов этому методу:
For Each row As DataRow In table.Rows
SubscribeProcExit(row.Item(0), Path.Combine(Application.StartupPath, "MonitoringApplication.txt"))
Next
Если файл журнала не завершается, он будет создан, и каждый раз при выходе из одного из процессов будет добавляться новая строка, в которую будут записываться Process.ProcessName
и Process.ExitTime
.
Обратите внимание, что row.Item(0)
должно содержать понятное имя Процесса. Например, notepad.exe
должен указываться как просто "notepad"
.
Private Sub SubscribeProcExit(processName As String, fileName As String)
Dim processes As Process() = Process.GetProcessesByName(processName)
If processes.Length = 0 Then Return
For Each p As Process In processes
p.EnableRaisingEvents = True
AddHandler p.Exited,
Sub()
Using sw As StreamWriter = File.AppendText(fileName)
sw.WriteLine($"Process: {p?.ProcessName}, Exit Time: {p?.ExitTime}")
p?.Dispose()
End Using
End Sub
Next
End Sub