[ОТВЕТИТЬ]
09.03.2016 15:03
OlegON
 
Наличие/отсутствие флага, выставляемого уборщицей.
Опять уходим от системного решения в сторону алгоритмического, ну да ладно.
Программа запускается постоянно, независимо от того, работает она или нет. (привет виндошедалеру)
Есть флаг начала. Неоднозначность в вариантах:
1 вариант
Запустили, выставили флаг начала. Уборщица.
2 вариант
Запустили, выставили флаг начала. Работаем.

суть задачи не в определении зависшего процесса, а в недопущении запуска второй копии при работающей первой.
09.03.2016 15:05
Micle
 
Цитата:
grannie Если мы "флагируем" И начало, И конец процесса - мы всегда сможем разобраться после внезапной уборщицы, вытаскивающей кабель из сервера, запущен ли уже процесс штатно или "висит".
Так кто/что нам это мешает делать?
Что то я не очень понимаю алгоритм по которому это можно сделать.... Как именно нужно флаговать... и как отделить уборщицу от повторного запуска ?
09.03.2016 15:08
Micle
 
Цитата:
OlegON суть задачи не в определении зависшего процесса, а в недопущении запуска второй копии при работающей первой.
Так удали файлы при запуске... винды
09.03.2016 15:11
OlegON
 
Цитата:
Micle Так удали файлы при запуске... винды
угу, давайте ломать голову, как сделать так, чтобы этой процедуре можно было гарантированно доверять, особенно, если винда разная (по версиям, политикам и локализации) и никто не логинится, например?
09.03.2016 15:18
Micle
 
Цитата:
OlegON угу, давайте ломать голову, как сделать так, чтобы этой процедуре можно было гарантированно доверять, особенно, если винда разная (по версиям, политикам и локализации) и никто не логинится, например?
тебе написать службу виндовую? Она будет гарантировано запускаться вместе с виндой, не зависимо от вошедшего пользователя и удалять файлы при запуске.... Это кстати ещё один вариант.
09.03.2016 15:20
grannie
 
Флаг1 - обычный файлик, формируемый по запуску
Флаг2 - файлик, формируемый по запуску, созданный с использованием FILE_ATTRIBUTE_TEMPORARY и FILE_FLAG_DELETE_ON_CLOSE, см. выше.
Флаг3 - обычный файлик, формируемый по завершении процесса

Запустили,
если есть флаг1, но нет флаг2 и флаг3, то - Уборщица.
если есть флаг1 и флаг2, но нет флаг3, то - активная копия запущена
если нет флаг1 - обнуляем все флаги нафиг и запускаем

Это если я правильно понимаю логику этих опций, конечно. И если ну ооооочень не хочется действительно просто сделать автоматически стираемую директорию при запуске.
09.03.2016 15:23
Micle
 
уборщица не удалит 2 файлик.... если только сама залогинится, с целью его удаления )))
09.03.2016 15:30
OlegON
 
Цитата:
Micle тебе написать службу виндовую? Она будет гарантировано запускаться вместе с виндой, не зависимо от вошедшего пользователя и удалять файлы при запуске.... Это кстати ещё один вариант.
да я и сам умею писать разные костыли, спасибо... вопрос только в том, что тогда дистрибутив моей программки уже будет конкретно так страдать немногоплатформенностью, просить прав администратора и прочее, прочее, что я сопровождать как-то не очень хочу.
Сейчас ее скачал и запустил. А надо будет еще сервисный ехе вытащить, установить и т.п. Это же самое относится к организации автостираемой при запуске директории.
09.03.2016 15:34
Micle
 
Кстати если программу запускать из этой службы то и файлики никакие не нужны... И уже его готовый "пускач" для этих целей runasservice называется и гуглится прекрасно
09.03.2016 15:35
OlegON
 
Т.е. можно при включенной UAC поставить сервис, не отвечая на вопросы?
09.03.2016 15:40
Micle
 
Цитата:
OlegON Т.е. можно при включенной UAC поставить сервис, не отвечая на вопросы?
Права нужны... если я буду в консоли 7 винды без админских прав, то службу мне поставить никто не даст. Т.е. права то у меня как раз есть... Но я должен в явном виде запустить консоль "от имени администратора". Вот в момент её запуска вопрос будет. После из неё можно делать что угодно без вопросов со стороны винды.
09.03.2016 15:43
OlegON
 
Вот это сразу и поставило крест на этой идее.
На самом деле, если кто не заметил, я решил вопрос, оставив сессию в базе с меткой. Если приложение сдохнет или хост перезагрузится, сессия отвалится. Сейчас уже за спортивный интерес воюем, только количество проблем для установки предлагаемых костылей не нравится :(
09.03.2016 15:47
Micle
 
По мне так Жаба - самый главный костыль. Возможно и оправданный в погоне за кросс платформенностью, а может и нет... А может всё таки стоит считаться с особенностями реализации "плюшек" под разными осями.... Каждый выбирает свой путь )
09.03.2016 16:34
grannie
 
Цитата:
Micle уборщица не удалит 2 файлик.... если только сама залогинится, с целью его удаления )))
Если я правильно понял логику - этот файл держится в оперативке, пока это возможно, и на диск физически не попадёт при пропадании питания
09.03.2016 16:35
KirillHome
 
А вот такое смешное решение

В командной строке
Цитата:
systeminfo | find "Время загрузки системы:"
или
Цитата:
systeminfo | find "System Boot Time:"
мы можем определить дату и время последней загрузки.

Хотя - придётся как минимум разбираться с локалью (один или другой вариант использовать), да ещё и с форматами дат и времени.

Ну, или анализируя журнал событий системы (событие с кодом 6005).
09.03.2016 16:56
OlegON
 
"Смешное решение" я уже рассматривал и отказался, там не только с локалью придется разбираться, но и с разными вариантами в разной винде, как я понял. Очень костыльно при большой вероятности несрабатывания.
Писать парсер виндожурнала (который, наверное, тоже не с любыми правами парсится) ради этой дряни я тоже не готов.
Что касается Java, то в момент старта у меня другой альтернативы, работающей под всеми нужными мне системами тупо не было. Я бы рад был что-то другое взять...
09.03.2016 17:16
student
 
Цитата:
grannie Если я правильно понял логику - этот файл держится в оперативке, пока это возможно
см. Memory-Mapped Files


но я не уверен что в яве прокатит

либо все таки заюзать политики входа в систему и "Запуск приложения как службы Windows" для случая "без входа в систему"
09.03.2016 17:42
vdm
 
Висит/не висит можно и по времени файла посмотреть, но зачем так упираться в файловое определение запущен/не запущен процесс?
Получить список java-процессов и найти там свою "копию" - нельзя?
09.03.2016 19:25
OlegON
 
Угу, на Java не прокатит и поиск процессов и MMF, на Java вот это : Файл, пропадающий при перезагрузке - Страница 3
MMF я делал когда-то на Дельфи, это немного не то.
Политики хреновы тем, что их могут и переназначить. Вот так вот "опаньки", а оно уже не работает на следующей перезагрузке и твой софт на это никак не повлияет.
Интересовало железобетонное решение для любого из языков в винде. Выяснилось, что такого нет. Ибо убогая ОС.
11.03.2016 10:47
grannie
 
Ты почитал про FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE ?

По-моему, описано ровно то, что ты хочешь сделать.

(Я не программист, я всего лишь рассуждаю логически, могу каких-то моментов не знать/упустить)
11.03.2016 13:28
OlegON
 
Да, наверное так и есть... Правда, из батника его не создашь... И при убийстве приложения файлик не почистится.


Опции темы


Часовой пояс GMT +3, время: 17:09.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.