Для краткого описания кода, который у меня есть, я хочу отслеживать определенное приложение с именем «CostX.exe», если оно закрывается и открывается, и я регистрирую его в файле с именем CostXLog.txt. Я держу это в бесконечном цикле. Проблема в том, что я не знаю почему, но он работает в течение короткого периода, когда я не делаю ничего продуктивного, но когда я делаю, скрипт просто пауза или я должен сказать, что он больше не работает, хотя он все еще остается в фоновом режиме. Это должен быть его желаемый результат.
Opened at: 4/7/2021 9:00:52 AM
Closed at: 4/7/2021 9:07:56 AM
CostX was opened for 7 minutes and 4 seconds.
Но когда я говорю, что делаю что-нибудь продуктивное, результат остается на уровне
Opened at: 4/7/2021 9:00:52 AM
Это мой код
Option Explicit
Const ForReading = 1, ForAppending = 8
Dim i, processName, strComputer
Dim fso, inName, outName, shell, curDir, objWMIService, colProcessList
Set fso = CreateObject("Scripting.FileSystemObject")
Set shell = CreateObject("WScript.Shell")
curDir = shell.CurrentDirectory
outName = curDir & "\CostXLog.txt"
Dim counter1, counter2, initialOpen
Dim minDiff, secDiff
Dim timedate1, timedate2
timedate1 = Date() & " " & Time()
initialOpen = 0
counter1 = 0
counter2 = 1
'msgbox curDir
strComputer = "."
processName = "CostX.exe"
Dim newFile, outputFile
newFile = Not fso.FileExists( outName )
while(true)
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select Name from Win32_Process WHERE Name LIKE '" & processName & "%'")
Set outputFile = fso.OpenTextFile( outName, ForAppending, True )
if initialOpen = 0 Then
outputFile.WriteLine "Ignore time after this line"
initialOpen = 1
else
If colProcessList.count>0 then
If counter1 = 0 Then
outputFile.WriteLine "Opened at: " & Date() & " " & Time()
timedate1 = Date() & " " & Time()
counter1 = 1
counter2 = 1
End If
else
If counter2 = 1 Then
outputFile.WriteLine "Closed at: " & Date() & " " & Time()
timedate2 = Date() & " " & Time()
minDiff = DateDiff("s", timedate1, timedate2)/60
secDiff = DateDiff("s", timedate1, timedate2)
outputFile.WriteLine "CostX was opened for " & Fix(minDiff) & " minutes and " & secDiff - (Fix(secDiff/60) * 60) & " seconds."
counter2 = 0
counter1 = 0
End If
End if
End If
outputFile.Close
WScript.Sleep 50
wend
Set objWMIService = Nothing
Set colProcessList = Nothing
PS: Я не программист, я собрал это из многих источников в Интернете, я немного понимаю, но некоторые части там, я действительно понятия не имею, я просто знаю, что они работают так, как я хочу к. Думаю, кто-нибудь может дать мне представление о том, как поддерживать его работоспособность, независимо от того, что я делаю на своем компьютере. Что-то не так с тем, что я сделал в коде? Я также сделал пакетный сценарий с той же целью, проблема та же, она также была сделана с помощью цикла, и он приостанавливается, когда я занят работой.
Обновлено: я не знаю, почему я получаю отрицательный голос, могу ли я получить хотя бы обратную связь, какие-либо мысли или комментарии к моему сообщению. Я знаю, что мое программирование - отстой, я в курсе и мне очень жаль, если я обидел любого законного программиста.
Если быть точным, то «некоторые части, которые я не понимаю» - это значения для objWMIService и colProcessList, я действительно не могу это понять, остальную часть кода я сделал сам. На самом деле я не прошу отладки, если проблема может быть указана, просто взглянув на сам код, я приму любые наблюдения, которые могут быть у вас или других. А может, проблема в самой ОС? Есть ли какие-то ограничения в ОС при использовании скриптов с бесконечным циклом?
У меня нет формального образования по программированию, так как я выпускник другой специальности, я изучал их только самостоятельно. Я буду уважать любые ваши комментарии. Мне очень жаль, если мне кажется, что я просто прошу других отладить это для меня. Как я сказал в последних строках своего сообщения, мне нужны только мысли или отзывы о моем коде, любая мелочь может помочь мне понять, почему возникает моя проблема. Спасибо.
@ trexed1509 Я попробовал код, заменив CostX.exe на notepad.exe и проверив файл журнала в notepad ++, и у меня он работает. Когда вы говорите do anything productive, это означает работу с этим exe или работу с другими приложениями?
В моем случае он работал с тем же приложением. Странно то, что код действительно работает, если я просто тестирую его, как будто закрываю и открываю приложение, скрипт действительно заполнит файл CostXLog.txt, как и предполагалось, однако, если я глубоко погрузюсь в свою работу, скажем будьте заняты работой около 20 минут, скрипт больше не заполняет файл .txt после того, как я закрываю и открываю приложение. Надеюсь, мое объяснение понятно. Спасибо @Flakes за то, что нашли время ответить.





Вы признаете, что понятия не имеете, какие части вашего кода делают. Таким образом, вы фактически просите других отладить его за вас. SO не для этого, поэтому вы получите отрицательные голоса.