1

Тема: WSH, JS: Использование мютексов.

Борюсь с повторными запусками скриптов.
можно ли как-то вызывать API функции (OpenMutex, CreateMutex...) из скрипта?
- использование файла блокировки не подходит по причине неудаления при крахе скрипта
- поиск имени скрипта в параметрах запуска хостов тоже не подходит (так как часто разные скрипты работают с одними и теми же данными и необходим запрещающий сигнал "сейчас данные заняты" хранить где-то список всех искомых скриптов тоже не подходит - при создании нового скрипта этот список нужно обновить и распространить по всем рабочим станциям)

2

Re: WSH, JS: Использование мютексов.

Конечно можно, через компонент DynamicWrapperX.
Вот, пожалуйста: http://www.script-coding.com/dynwrapx.html

3 (изменено: badik, 2013-07-18 06:11:47)

Re: WSH, JS: Использование мютексов.

Просто файл блокировки необходимо открывать на добавление (mode=8) и не закрывать до окончания работы (операции).
При повторном одновременном запуске  скрипта возникнет ошибка: файл занят.

var fso = new ActiveXObject("Scripting.FileSystemObject")
f_File=fso.OpenTextFile("main.flag",8,true)

Данный подход можно использовать для создания тригеров(счетчиков)

+ Тригер--Счетчик
EDNo_("\\\\server\\share\\EDNO")

function EDNo_(fTriger)
{
  var start = false
  var fFlag =  fTriger + ".flag"
  var flag =null
  while(!start)
  {
    try
    {
      flag = fso.OpenTextFile(fFlag, 8, true)
      start = true
    }
    catch(e)
    {
      _print(["Ошибка открытия нумератора", fFlag, e.number + " " + e.description].join("\n"))
      _sleep(500)
    }
  }
  var fnew = !fso.FileExists(fTriger)
  var EDNo = 0
  if(!fnew)
  {
    var oFile = fso.OpenTextFile(fTriger, 1, true)
    EDNo = 1 * oFile.ReadLine()
    oFile.Close()
  }
  EDNo = 1 + EDNo
  var oFile = fso.OpenTextFile(fTriger, 2, true)
  oFile.Write("" + (EDNo % 25000))
  oFile.Close()
  flag.Close()
  return(EDNo)
}

4

Re: WSH, JS: Использование мютексов.

DynamicWrapperX - 100% то, что нужно.
файл блокировки тоже в таком варианте подойдет

5

Re: WSH, JS: Использование мютексов.

putrsa, можно ещё при старте сценария с помощью WMI-класса Win32_Process опрашивать список процессов WSCRIPT.EXE/CSCRIPT.EXE на предмет наличия у свойства CommandLine соответствующего содержания.

6

Re: WSH, JS: Использование мютексов.

putrsa пишет:

...
- поиск имени скрипта в параметрах запуска хостов тоже не подходит (так как часто разные скрипты работают с одними и теми же данными и необходим запрещающий сигнал "сейчас данные заняты" хранить где-то список всех искомых скриптов тоже не подходит - при создании нового скрипта этот список нужно обновить и распространить по всем рабочим станциям)

putrsa,

1. Используйте унификацию наименования скриптов одного семейства - например, у всех один префикс MyScript_ReadData, MyScript_WriteData и т.д.
При запуске очередного скрипта в параметрах уже запущеных ищите вхождение MyScript_.
При таком подходе количество вновь создаваемых скриптов неограничено без каких-либо дополнительных телодвижений.

2. В каком виде хранятся у Вас данные, если самому приходится анализировать заняты они или нет?