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

Обсуждение, связанное с разработкой ПО верхнего уровня
rsv
advanced
advanced
Сообщения: 152
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 25 раз
Контактная информация:

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

Сообщение rsv »

Спасибо, Borjomy_1 и dadreamer. Думал уже есть известные способы решения :(

P.S. Когда-то на Delphi это злементарно решалось. Сейчас, наверное, можно на плюсах чего-нибудь своять и запускать из VI при старте приложения...
Artem.spb

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

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

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

rsv писал(а): 04 авг 2023, 09:36 P.S. Когда-то на Delphi это злементарно решалось.
как именно?
rsv
advanced
advanced
Сообщения: 152
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 25 раз
Контактная информация:

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

Сообщение rsv »

Вот нашёл код в древнем приложении (Delphi 2006).
Используется WinAPI (модуль Windows).

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

const  
  AppLockingAtomName: PAnsiChar = 'STAND';

var
  AppLockingAtom: ATOM;

  // Проверка на запуск копии приложения
  AppLockingAtom := GlobalFindAtom(AppLockingAtomName);
  if AppLockingAtom = 0 then
    // Создать Атом-локер
    AppLockingAtom := GlobalAddAtom(AppLockingAtomName)
  else
    // Атом-локер найден. Останов.
    begin
      Halt(0);
    end;
При закрытии приложения атом надо было уничтожить. Если выход был некорректный, то приходилось перезагружать комп.
Artem.spb

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

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

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

rsv писал(а): 07 авг 2023, 10:28 Используется WinAPI (модуль Windows).
Если у вас это элементарно и хочется извращаться, особенно с учётом этого
При закрытии приложения атом надо было уничтожить. Если выход был некорректный, то приходилось перезагружать комп.
То в чём проблема, используйте этот же метод
atom.png
atom.png (9.25 КБ) 127 просмотров
По мне так вариант Borjomy_1 гораздо проще. А ещё можно что-то писать в реестре (так до сих пор кто-то делает?), создать файл в appData и т.п. Это и проще, и перезагружаться не надо в случае ошибок, можно руками открыть "замок".
В любом случае это на совести вашего кода - проверил, что красный свет светофора, стою на перекрёстке, а не еду дальше.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3895
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 110 раз
Контактная информация:

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

Сообщение dadreamer »

rsv
Кроме атома с его недостатками можно использовать именованный канал или глобальный системный мьютекс. Вариантов масса. А вообще, предусмотрите в своей программе также очистку атомов по спец. ключу или ещё как. Ну, или сделайте отдельную утилиту. Перезагружать комп - это как из пушки по воробьям. Есть также Atom Table Monitor, правда, у меня кнопка Delete не работает, видимо, надо писать автору. :dntknw:

Artem.spb
Caution Do not specify the location of a system shared library, such as kernel32.dll, by path. Because LabVIEW automatically includes by-path shared libraries in build specifications, you might distribute a by-path system shared library to another computer inadvertently. Redistributing some shared libraries, such as kernel32.dll, might cause the target computer to crash. Therefore, always specify system shared libraries by name.
Configuring the Call Library Function Node
Artem.spb

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

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

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

dadreamer писал(а): 07 авг 2023, 17:11
Artem.spb
Caution Do not specify the location of a system shared library, such as kernel32.dll, by path.
Не надо воспринимать это как руководство к действию :)
Я показал автору вопроса, что "элементарный" метод из Delphi всё ещё рабочий.
rsv
advanced
advanced
Сообщения: 152
Зарегистрирован: 18 июл 2019, 13:53
Версия LabVIEW: 2020
Откуда: Россия, Ижевск
Благодарил (а): 25 раз
Контактная информация:

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

Сообщение rsv »

Хорошо, что тему подробно разобрали и привели несколько возможных решений. С ходу не всё понял, но разберусь, когда дойдёт дело до реализации. Спасибо.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Лицевая панель»