Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > узнать запущен ли скрипт на vbs


Автор: mihanik 16.1.2011, 00:32
Дано: по назначенному заданию запускается скрипт на VBS
Надо: если скрипт обнаруживает, что его копия ещё запущена с прошлого раза, то он завершает свою работу (ранее запущенная копия скрипта должна продолжать работать)
 
Как сие сотворить?
Для VB6 - это просто 

Код

If App.PrevInstance Then
   MsgBox "Программа уже запущена."
   Unload Me
End If


А вот для скрипта...

Добавлено через 10 минут и 11 секунд
Ну... Я могу узнать, запущен ли wscript или cscript (и даже сколько экземпляров)
Но вот имя выполняемого ими скрипта пока не могу получить... :-(

Код

'********************************************************************
'*
'*  Функция   : ProcessCount
'*  Описание  : Возвращает количество запущенных экземпляров процесса с указанным именем
'*  Вход      : PName - имя процесса
'*  Выход     : число запущенных процессов
'*
'********************************************************************
Function ProcessCount (ByVal PName)
Dim N, objService, objProc    

    On Error Resume Next
    
    ProcessCount = 0
    N = 0
    
    Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
    
    For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name like  '" & PName & "'")
        N = N +1
    Next
    
    ProcessCount = N
    
End Function

Автор: Akina 16.1.2011, 23:47
Задача в общем случае не то что непростая - но, по-моему, вообще на VBS невыполнимая.
Попробуй обычный костыль в форме флага - скажем, значения некоего параметра в реестре. Ну и предусмотри у скрипта ключ /force есссно. 

Автор: hclubmk 24.1.2011, 15:12
Ну почему невыполнимая? COM-обертка для API + семафор. Должно получиться.

Автор: Akina 24.1.2011, 15:16
Цитата(hclubmk @  24.1.2011,  16:12 Найти цитируемый пост)
COM-обертка для API + семафор.

На VBS?????

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)