Страницы: 1
RSS
Найти ИД процесса и закрыть процесс
 
Здравствуйте.
Встала такая задача - узнать ИД запущенного процесса и удалить этот процесс.
Конкретно в моём случае при извлечении скадой числа из екселя запускается процесс EXCEL.EXE,
(C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE).
И с каждым новым обращением к екселю из скады запускается очередной EXCEL.EXE, таким образом память забивается и всё виснет.
В скаде на работу с екселем такой скрипт:
Код
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = False
objExcelApp.Workbooks.Open ""+path
Set objWorkSheet = objExcelApp.ActiveWorkbook.Worksheets(num_sheet)
Set objTag1= SmartTags(""+name_tag2)
objTag1.Value= objWorkSheet.Cells(num_row,num_colum).Value
objTag1.Write

objExcelApp.ActiveWorkbook.Save
objExcelApp.Workbooks.Close
objExcelApp.Quit
Set objTag1= Nothing
Команды Kill, TASKKill пробовал, скада их не знает, а я не знаю скады.
Хочу в екселе макросом удалять запущенный процесс.
Но удалять как бы не сразу, а чтоб скада успела прочитать значение из екселя. Допустим через 1 секунду после начала работы приложения,
т. к. скада читает ексель не чаще 1 раза в 2 секунды.
Изменено: юнат - 04.11.2022 11:10:26
 

Попробуйте завершить таким способом.  

Код
Dim Process As Object
Dim nnn As String
For Each Process In GetObject("winmgmts:").ExecQuery("Select * from Win32_Process") 
    nnn = Process.Caption 
    If InStr(1, nnn, "EXCEL.exe", 1) > 0 Then 
        Process.Terminate
        Exit For 'если один процесс
    End If
Next
Изменено: asesja - 04.11.2022 11:53:54
 
asesja, код работает, большое спасибо!
Принудительно запускаю макрос столько раз, сколько екзешников запущенно,
екзешники удаляются по одному, при удалении последнего файл сам закрывается.
Не могу запустить его автоматически.
Пробовал просто открывать файл после выполненных операций и потом закрывать его,
и пробовал запускать в открытом файле макрос - приложение не удаляется.
Код
Set objExcelApp = CreateObject("Excel.Application")objExcelApp.Visible = False
objExcelApp.Workbooks.Open ""+path2

objExcelApp.Application.Run "Рабочая_V4.xlsm!Module1.w" 'запуск макроса удаления
objExcelApp.Workbooks.Close
objExcelApp.Quit
При этом в ЭтаКнига:
Код
Private Sub Workbook_Open()
    Call w ' вызываю программу удаления
End Sub
может это не работает когда открытие Visible = False?
Подскажите что не правильно я делаю?
 
Тыц
Тыц
 
юнат,
строчку Exit For 'если один процесс, пробовали убрать из кода? Макрос должен пройти по всем процессам и у которых название EXCEL.exe и закрыть их.

 
Изменено: asesja - 04.11.2022 20:30:45
 
Цитата
юнат ,
строчку  Exit For 'если один процесс , пробовали убрать из кода?
Конечно же нет. Я в Вашей большой авиации даже галандских кур не гружу)
Ура, заработало!
RAN, у Вас конкретно про ИД, но пока не понадобилось, благодарю.
Спасибо за помощь!
Страницы: 1
Наверх