батник-ребутник

Создание приложений, библиотек, инсталляторов
Ответить
Artem.spb

Activity Автор
professor
professor
Сообщения: 3438
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 52 раза
Поблагодарили: 176 раз
Контактная информация:

батник-ребутник

Сообщение Artem.spb »

Похожая тема тут поднималась, но у меня немного другая задача: после смены настроек надо перезапустить программу, потому что много чего происходит при старте, а менять всё это легаси так, чтобы перечитать настройки без перезапуска, ресурсов нет.

Вариант сделать гигантский цикл прекрасен, но меня не устраивает.

Поэтому иду по пути перезагрузки.
Погуглил тут и там, и ничего умнее батника не нагуглил.
Сделал такой subVI. Он создаёт батник и вызывает его. Это чтобы не заморачиваться с именем exe, вдруг его сменят на "версия ХХ" и прочее.
reboot.png

собственно вопрос, можно ли вызвать эту команду сразу в cmd, а не запускать через файл?
У меня не получилось. Видимо, exec выполняется в рамках программы и завершается вместе с ней, независимо от таймаутов и флагов "не ждать завершения"

Код: Выделить всё

cmd /c
echo Restarting the app...
TIMEOUT 5
echo Restarting the app...
start %s
exit
Sergey Puzanov
assistant
assistant
Сообщения: 127
Зарегистрирован: 05 ноя 2020, 08:26
Версия LabVIEW: 18, 20.0f1
Благодарил (а): 24 раза
Поблагодарили: 4 раза
Контактная информация:

Re: батник-ребутник

Сообщение Sergey Puzanov »

Сейчас возможности проверить самому нет, вот этот способ тоже пробовали? https://forums.ni.com/t5/LabVIEW/Restar ... 575/page/2
Artem.spb

Activity Автор
professor
professor
Сообщения: 3438
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 52 раза
Поблагодарили: 176 раз
Контактная информация:

Re: батник-ребутник

Сообщение Artem.spb »

Sergey Puzanov писал(а): 09 июн 2024, 08:51 вот этот способ тоже пробовали?
Этот способ отличается от моего только тем, что батник создаётся в темпах и самоудаляется.
Разве что можно взять на вооружение самоудаление :)
Снимок.JPG
Снимок.JPG (24.14 КБ) 333 просмотра
FredP
beginner
beginner
Сообщения: 26
Зарегистрирован: 19 апр 2020, 01:22
Версия LabVIEW: 2019
Благодарил (а): 2 раза
Поблагодарили: 5 раз
Контактная информация:

Re: батник-ребутник

Сообщение FredP »

Еще как вариант - юзеру отдать. Ну типа "для применения настроек перезапустите программу" :crazy:
Artem.spb

Activity Автор
professor
professor
Сообщения: 3438
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 52 раза
Поблагодарили: 176 раз
Контактная информация:

Re: батник-ребутник

Сообщение Artem.spb »

FredP писал(а): 10 июн 2024, 23:14 Еще как вариант - юзеру отдать. Ну типа "для применения настроек перезапустите программу" :crazy:
Аху дивительно удобно, юзерфрендли изо всех щелей.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2219
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 28 раз

Re: батник-ребутник

Сообщение Borjomy_1 »

Инициализацию вынести в отдельный блок и вызывать этот блок по необходимости...
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1237
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: батник-ребутник

Сообщение Kosist »

Artem.spb писал(а): 09 июн 2024, 01:15 Вариант сделать гигантский цикл прекрасен, но меня не устраивает.
А зачем гигантский? Создайте Launcher, который будет запускаться как exe, и он уже запустит Вашу программу (которая сейчас напрямую вызывается как exe). А когда Вы остановите свою главную программу, то лаунчер в цикле ее перезапустит. Главное различать когда нужно программное выключение из перезапуском, а когда юзер выключил программу, и перезапуск не нужен.
Мы делили апельсин - много наших полегло...
Artem.spb

Activity Автор
professor
professor
Сообщения: 3438
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 52 раза
Поблагодарили: 176 раз
Контактная информация:

Re: батник-ребутник

Сообщение Artem.spb »

Kosist писал(а): 16 июн 2024, 11:57 Создайте Launcher, который будет запускаться как exe, и он уже запустит Вашу программу
Несмотря ни на что, это тоже большая переделка программы (как минимум организовать связь между новой и старой частью).
Вариант запустить программу из батника устраивает меня больше всего. Вопрос был, можно ли запустить несколько строк в cmd без привязки к программе.

Вариант "инициализацию вынести в отдельный блок" всегда возможен, но в данном случае инициализация - это чтение настроек, асинхронный запуск нескольких vi в зависимости от настроек, вызов какого-то неадекватного количества property, которые к тому же распиханы в sequence. Так что нет, этот вариант не рассматривается.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5482
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 88 раз

Re: батник-ребутник

Сообщение IvanLis »

Artem.spb писал(а): 09 июн 2024, 01:15 собственно вопрос, можно ли вызвать эту команду сразу в cmd, а не запускать через файл?
Можно, но команды через разделитель писать в одну строку

Код: Выделить всё

cmd /c echo Restarting the app... && TIMEOUT 5 && echo Restarting the app... && start %s && exit
У меня в примере так сделано:

Код: Выделить всё

cmd /c echo Stop the app... && TIMEOUT 7 && Taskkill /IM %s /F && echo Start the app... && TIMEOUT 7 &&  start %s &&  TIMEOUT 7 && exit
reboot.zip
(207.93 КБ) 11 скачиваний
писал(а):Для того чтобы выполнить несколько команд из одной командной строки, нужно объединить их с помощью символа условной обработки:

команда1 & команда2 — Используется для разделения нескольких команд в одной командной строке. В cmd.exe выполняется первая команда, затем вторая команда.

команда1 && команда2 — Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.

команда1 || команда2 — Запускает команду, стоящую за символом ||, только если команда, стоящая перед символом || не была выполнена. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).
Ответить

Вернуться в «Создание приложений»