Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Нужно что бы программа в локальной сети запускалась в единственном энкземпляре (http://forum.oszone.net/showthread.php?t=200222)

deck53 22-02-2011 19:29 1619390

Нужно что бы программа в локальной сети запускалась в единственном энкземпляре
 
Нужно что бы программа в локальной сети запускалась в единственном энкземпляре.
Нашел способ с помощью утилиты PsList, но несколько дней экспериментов с политиками и правами доступа не дали рензультата, зато есть доступ в общую папку. Из чего родилась идея:
-Батник должен запускать данную программу, при запуске создавая в своей общей папке например 111.txt
-После выхода из программы 111.txt должен удаляться (Не знаю воозможно ли это).
-А перед запуском проверять, нет ли такокого файлика в чужой общей папке по адресу \\User\111.txt Соответственно если файл есть, то программа не должна запускаться.
Буду признателен за помощь. В батниках я чайник...

Anonymоus 23-02-2011 14:27 1619968

$Userlist - список пользователей, по 1 на строку. Например, так:
Код:

\\192.168.1.217
\\MORFEY
\\BIBLIOTEKA
\\MICROSOF-D58208

$Sharename - Название общей шары на всех компах в сети
$LocalShare - Путь к общей шаре на этом компе
$Program - Нужная программа
Если компьютер не в сети, то опрашивать его может до 20 секунд, чтобы не казалось, что скрипт завис, я добавил индикацию текущего адреса

Код:

@Echo Off
Set $Userlist=userlist.txt
Set $Sharename=Temp
Set $LocalShare=D:\Temp
Set $Program=C:\Windows\notepad.exe

Set /A $isRunning=0
For /F "tokens=*" %%l In (%$Userlist%) Do (
Echo Checking... %%l\%$Sharename%\
If Exist %%l\%$Sharename%\isRunning.flag Set /A $isRunning=$isRunning+1
)
If Not %$isRunning%==0 (Exit) Else (Echo.>"%$LocalShare%\isRunning.flag")
Echo Do not close this window
Call "%$Program%"
Del "%$LocalShare%\isRunning.flag"


Busla 23-02-2011 17:44 1620110

Цитата:

Цитата Anonymоus
Если компьютер не в сети, то опрашивать его может до 20 секунд »

Это что-то новое - if exists вообще не работает с сетевыми путями ;-)

deck53 23-02-2011 19:56 1620218

Anonymоus Код работает. Премного благодарен, просто огромное спасибо.
Сначала isRunning.flag не создавался в своей общей папке (нет доступа). Оказалось что надо добавить в разрешения себя (админа !!!).

Anonymоus 23-02-2011 22:52 1620333

Цитата:

Цитата Busla
if exists вообще не работает с сетевыми путями »

А вот автор этой статьи даже написал мультиплеер крестики-нолики, именно с использованием файлов-меток и if (not) exist, ну и на закуску - подобие телнета с использованием аналогичных, по вашему утверждению, не работающих команд.

Busla 24-02-2011 10:08 1620527

Anonymоus, да, извиняюсь - что-то попутал


Время: 13:33.

Время: 13:33.
© OSzone.net 2001-