Всем творческих успехов!
Не смог найти информации по вопросу, сформулированному в названии темы.
Мне нужно каким-то образом отследить, запущена ли программа (или VI в терминах LabView) в локальной сети, и если она где-то уже выполняется, не запускать второй экземпляр.
Компьютеров в сети не много и у всех статические, постоянные IP-адреса.
Может есть в LabView какие-то средства для решения такой задачи?
Буду рад подсказкам о решении этого вопроса.
Спасибо!
Запрет запуска копии приложения в локальной сети
- sanekerfort
- interested
- Сообщения: 5
- Зарегистрирован: 18 янв 2011, 08:15
- Версия LabVIEW: 2012
- Откуда: Томск
- Контактная информация:
Запрет запуска копии приложения в локальной сети
В электронике чудес не бывает, бывают плохие контакты!
-
IvanLis
- guru
- Сообщения: 5463
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 87 раз
Re: Запрет запуска копии приложения в локальной сети
Можно использовать Network-Published Shared Variable (http://www.ni.com/white-paper/4679/en/#toc3). Хранить ее на основном компьютере, клиенты при запуске будут к ней обращаться и считывать "флаг", по его значению принимать решение, можно запускаться или нет. В переменной можно хранить также время запуска и IP компьютера на котором она выполняется.sanekerfort писал(а):Мне нужно каким-то образом отследить, запущена ли программа (или VI в терминах LabView) в локальной сети, и если она где-то уже выполняется, не запускать второй экземпляр.
Компьютеров в сети не много и у всех статические, постоянные IP-адреса.
Может есть в LabView какие-то средства для решения такой задачи?
Аналогичный функционал можно реализовать с использованием расшаренного файла на сервере.
Тут один недостаток, в случае падения "основного" компа вся система перестанет работать правильно.
В принципе можно сделать так, чтобы клиент периодически рассылал по сети широковещательный пакет. Остальные клиенты при запуске некоторое время слушали порт, и если пакета не получено, то запускались.
Но здесь могут быть проблемы с занятостью портов.
Я бы например предпочел первый вариант.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Запрет запуска копии приложения в локальной сети
я бы таки пользовал UDP-порт.
Софт в процессе работы раз в какой-то интервал шлёт уведомление, что он работает.
Итого, при запуске программа должна опросить все компьютеры в локальной сети (вы говорили, что адреса статические, что упрощает задачу, хотя всегда есть вариант добавления новой машины в сеть, что вызовет необходимость добавлять её к опросу) и если нигде нет запущенной копии - начать работу.
Ну или, если есть в сети сервер, то сделать на нём "светофор". Я бы для этого использовал веб-сервис или TCP-порт. Но как по мне - веб-сервис лучше на случай, если позже захочется расширить функционал этого сервера, сделать какое-то API и т.д.
Софт в процессе работы раз в какой-то интервал шлёт уведомление, что он работает.
Итого, при запуске программа должна опросить все компьютеры в локальной сети (вы говорили, что адреса статические, что упрощает задачу, хотя всегда есть вариант добавления новой машины в сеть, что вызовет необходимость добавлять её к опросу) и если нигде нет запущенной копии - начать работу.
Ну или, если есть в сети сервер, то сделать на нём "светофор". Я бы для этого использовал веб-сервис или TCP-порт. Но как по мне - веб-сервис лучше на случай, если позже захочется расширить функционал этого сервера, сделать какое-то API и т.д.
колдооооовствооооо! (С)
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Запрет запуска копии приложения в локальной сети
Здесь немного по-другому: использовать широковещательные пакеты UDP. Каждое приложение 1. Посылает широковещательный запрос (на широковещательный порт) и ждет ответа по стандартному порту. Если ответа нет, то приложение не закрывается. 2. открывает этот широковещательный порт уже у себя, по которому ловит запрос (адрес отправителя известный) и отправляет ответ на стандартный порт отправителю, указывая, что приложение уже запущено. Обратите внимание: широковещательный IP адрес и порт отличаются от обычных.я бы таки пользовал UDP-порт.
Софт в процессе работы раз в какой-то интервал шлёт уведомление, что он работает.
Итого, при запуске программа должна опросить все компьютеры в локальной сети (вы говорили, что адреса статические, что упрощает задачу, хотя всегда есть вариант добавления новой машины в сеть, что вызовет необходимость добавлять её к опросу) и если нигде нет запущенной копии - начать работу.
Ну или, если есть в сети сервер, то сделать на нём "светофор". Я бы для этого использовал веб-сервис или TCP-порт. Но как по мне - веб-сервис лучше на случай, если позже захочется расширить функционал этого сервера, сделать какое-то API и т.д.
-
- interested
- Сообщения: 5
- Зарегистрирован: 29 авг 2016, 17:11
- Версия LabVIEW: 2016
- Откуда: Москва
- Контактная информация:
Re: Запрет запуска копии приложения в локальной сети
Тут нужно отталкиваться от того, какую именно задачу Вы пытаетесь решить подобным способом.
Если стоит задача защитить свое ПО от тиражирования и лицензировать его, то для этого есть специализированные средства: http://labviewportal.org/viewtopic.php?f=87&t=8870
Если стоит задача защитить свое ПО от тиражирования и лицензировать его, то для этого есть специализированные средства: http://labviewportal.org/viewtopic.php?f=87&t=8870
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 673 Просмотры
-
Последнее сообщение Sergey Puzanov
-
- 6 Ответы
- 905 Просмотры
-
Последнее сообщение AndreyDmitriev