Batya

|
Posted: Wed May 13, 2009 17:20 Post subject: |
|
|
| Parcan wrote: | А можно ли в скрипте узнать не запущен ли он уже?
Чтобы если скрипт запустить 2 раза один выполнялся а второй чухал это и закрывался бы. |
| Code: | Option Explicit
Dim WMI, ComLine, oProc, oP, Btn, i, ProcCount
On Error Resume Next
'Объявляем объект WMI
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
MsgBox Err.Number & ": " & Err.Description
WScript.Quit
End If
'В командной строке должно быть по 2 слэша, например, C:\\Путь\\до\\файла\\Файл.Расширение
ComLine = Replace(WScript.ScriptFullName, "\", "\\")
'Ищем в списке процессов по командной строке, не запущен ли уже данный скрипт
Set oProc = WMI.ExecQuery("SELECT * from Win32_Process " &_
"WHERE CommandLine Like '%wscript%" & ComLine & "%'")
ProcCount = oProc.Count
'Если процессов более одного (с учетом текущего запуска)
If ProcCount > 1 Then
'Выдаем предупреждение с предложением завершить работу старого скрипта
Btn = MsgBox("Обнаружен ранее запущенный аналогичный скрипт." &_
vbNewLine & "Старый процесс будет замещен новым." &_
vbNewLine, _
vbOKCancel + vbQuestion, "Перезапуск скрипта")
'Если отвечаем "OK"
If Btn = vbOK Then
i = 0
'Убиваем все аналогичные процессы, кроме текущего (он последний)
For Each oP In oProc
i = i + 1
If i = ProcCount Then
Exit For
End If
oP.Delete_
Next
Else
Set oProc = Nothing
Set WMI = Nothing
WScript.Quit
End If
End If
On Error Goto 0
|
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|