Страница 1 из 2

Запрет на повторный запуск

Добавлено: 28 апр 2017, 21:56
jane_wild
Запуск довольно "увесистого" приложения происходит со значительной задержкой. В смысле юзер сделал двойной щелчок по иконке, а Frot Panel появилась секунд через 10. Что собственно вводит его в заблуждение и он щелкает еще пару раз, запуская уже запущенное приложение. Далее понятно ошибки и последующий вылет всего, что таким непосильным трудом инициализировалось. Мне видится два пути. Первый - проверка запущено ли уже приложение с данным именем, с последующим запретом на повторный запуск. И второй - показать юзеру окошко типа splashscreen, который даст понять, мол нечего щелкать запущено уже все...
Мне кажется что первый вариант более правильный (а лучше комбинация двух), но я не знаю как проверить на наличие уже запущеной копии, особенно если эта копия запущена в отдельном потоке.
Решила попытаться сделать по второму варианту, но и тут неудача. В прилагаемом примере все работает, а вот в реальном проекте нет. В смысле этот splashscreen появляется буквально на мгновение, все с той же 10-ти секундной задержкой и тутже запускается главное приложение. Почему то происходит ожидание всей инициализации, хотя по идее Frot Panel StartUP.vi должена появится сразу же. Понимаю что я чего то не понимаю. Посмотрите пожалуйста может вложеный проект. Может я чего не правильно делаю? И вообще кто как решает эту проблему. Запрет на повторный запуск уже запущенного приложения. Спасибо

Re: Запрет на повторный запуск

Добавлено: 28 апр 2017, 22:07
Borjomy_1
По умолчанию запускается один экземпляр. Это регулируется в ини файле, рядом с экзешником.
Front панель сначала грузит все SubVI, а уже потом запускается. Это заметно на тяжелых приложениях, либо на слабых машинах. Т. е если загрузка происходит больше некоторого времени (секунд десять), то появляется индикаторная панель, которая отображает процесс загрузки VI-ек

Re: Запрет на повторный запуск

Добавлено: 28 апр 2017, 22:23
jane_wild
открыла я файл конфигурации и где тут чего отрегулировать, что бы запускался только один экземпляр?

server.app.propertiesEnabled=True
server.tcp.serviceName="My Computer/VI Server"
server.vi.propertiesEnabled=True
WebServer.TcpAccess="c+*"
WebServer.ViAccess="+*"
DebugServerEnabled=False
DebugServerWaitOnLaunch=False
RTTarget.ApplicationPath=C:\Users\Jane\Documents\LabVIEW Data\Remote Development\startup.rtexe
RTTarget.VIPath=C:\Users\Jane\Documents\LabVIEW Data\Remote Development

Re: Запрет на повторный запуск

Добавлено: 28 апр 2017, 22:48
Borjomy_1
Попробуйте прописать
allowmultipleinstances=False

Взято отсюда:
http://www.labviewportal.org/viewtopic. ... 84&p=17801

Re: Запрет на повторный запуск

Добавлено: 28 апр 2017, 23:03
Borjomy_1
Можно еще попробовать сделать основным VI- StartUp, а уже из него динамически запускать MainFP.

Re: Запрет на повторный запуск

Добавлено: 28 апр 2017, 23:15
Kosist
Присоединяюсь к идее Borjomy_1 - самый простой, но эффективный выход из ситуации.

Re: Запрет на повторный запуск

Добавлено: 28 апр 2017, 23:23
Blackman
Вы не открываете фронт панель SplashScreen (StartUp.vi). Поэтому в RunTime Вы SplashScreen и не видите. А так все работает правильно.

Re: Запрет на повторный запуск

Добавлено: 29 апр 2017, 01:17
jane_wild
Borjomy_1 писал(а):Попробуйте прописать
allowmultipleinstances=False
Спасибо, это сработало! Повторного запуска не происходит, сколько "не жмякай" по иконке.
Blackman писал(а):Вы не открываете фронт панель SplashScreen (StartUp.vi). Поэтому в RunTime Вы SplashScreen и не видите. А так все работает правильно.
Согласна, но в свойствах Window Appearance StartUp.vi стоит птичка "Show front panel when loaded" Пробовала я метод FP.Open - результат тот же, не срабатывает.
Borjomy_1 писал(а):Можно еще попробовать сделать основным VI- StartUp, а уже из него динамически запускать MainFP.
Имеется ввиду в Application Builder на вкладке Source Files в качестве "Startup VIs" указать StartUp.vi ? Естественно Main FP.vi Always Included. Так у меня так и сделано. Посмотрите в приложенном проекте. Или что то другое имеется ввиду под "динамически запускать" ?

Re: Запрет на повторный запуск

Добавлено: 29 апр 2017, 08:45
Blackman
Согласна, но в свойствах Window Appearance StartUp.vi стоит птичка "Show front panel when loaded"
???
VI Properties.png
Пробовала я метод FP.Open - результат тот же, не срабатывает.
Убедитесь, что при сборке приложения фронт панель StartUp.vi не удаляется.

Обновите Вашу версию LabVIEW и Runtime Engine. Было несколько исправлений и как минимум один ServicePack.

Upd: Мой Test2016.exe

Re: Запрет на повторный запуск

Добавлено: 29 апр 2017, 18:09
jane_wild
Вы меня не поняли, видимо я плохо объяснила.
В прилагаемом примере все работает, а вот в реальном проекте нет
Эта цитата из моего первого поста. Создав простенький проект, я показала сам механизм вызова, в верности которого не уверена, может нужно по другому как то делать вызов главного VI, что бы не цеплять все dependences StartUp-ом. Так вот, в этом проекте все работает и выложила я его в LV2013 для доступа к нему большей аудитории. Хотя сама работаю в LV2016. А вот в реальном проекте нет, в смысле заставка не показывается пока все не инициализируется, потом на мгновение выскочит и тут же исчезает поскольку стартует главный VI (и галочка там Show FP стоит). Вот нашла ветку с описанием моей проблемы на буржуйском форуме, решение которой описывается на другой ветке Там в конце есть ссылка на проект, но у меня не установлены какие то тулкиты, потому как половина VI с вопросительными знаками...

Re: Запрет на повторный запуск

Добавлено: 03 авг 2023, 10:28
rsv
Подниму тему.
Проблема примерно та же - запрет повторного запуска приложения для нетерпеливых (которые не дождались и нажали ещё раз) и для забывчивых (приложение уже запущено, но его не видно и пытаются запустить ещё раз).

Текущее состояние проблемы:
Опция allowmultipleinstances=False установлена по умолчанию (даже если напрямую в ini-файле не прописана), но она распространяется только на запуск из одной папки. Если запуск выполняется из другой папки, то опция не работает (в обоих ini-файлах прописывал, не помогло).

Предполагаю, что можно использовать Shared Variable. Может ещё какие-то варианты есть (интересует именно запрет, анимация здесь не подойдёт)?

Re: Запрет на повторный запуск

Добавлено: 03 авг 2023, 11:55
Borjomy_1
Ну извините, два разных экземпляра exe, запускаемые из разных мест, это не проблема реализации LabView. Это ваши системные ошибки. Почему пользователь вообще может запустить два разных приложения? Вы ему заботливо кладете две иконки рядом? Опять-же, тяжелое приложение это тоже системная ошибка. Грузите необходимый минимум, а остальное по мере необходимости.

Re: Запрет на повторный запуск

Добавлено: 03 авг 2023, 12:33
rsv
Borjomy_1 писал(а): 03 авг 2023, 11:55 Ну извините, два разных экземпляра exe, запускаемые из разных мест, это не проблема реализации LabView.
Это как раз проблема реализации LabView. Если бы не было конфликтов между одинаковыми приложеними, то и проблем бы не было. Если несколько копий приложения не могут сосуществовать одновременно, то должен быть программный запрет на запуск копий. Иначе это грозит головной болью для техподдержки как минимум. А как максимум - проблемами с оборудованием.
Borjomy_1 писал(а): 03 авг 2023, 11:55 Почему пользователь вообще может запустить два разных приложения? Вы ему заботливо кладете две иконки рядом?
Есть необходимость держать на ПК несколько версий приложения.

P.S. Тестировщики тоже пользователи.

Re: Запрет на повторный запуск

Добавлено: 03 авг 2023, 14:25
dadreamer
Это обсуждалось тут: Multiple executable instances running without AllowMultipleInstances set in INI file. Но конкретного решения там нет. Надо "костылить" что-то своё, например, через IPC (TCP, NS и т.п.).

Re: Запрет на повторный запуск

Добавлено: 03 авг 2023, 14:52
Borjomy_1
Самое простое - открытие UDP порта. Второе приложение этот-же порт открыть не сможет.