powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема обновления софта, запущенного из разных учётных записей
25 сообщений из 45, страница 1 из 2
Проблема обновления софта, запущенного из разных учётных записей
    #39502554
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот у нас есть софт, который предполагает автообновление
Кроме того, приложение может быть запущено из разных учётных записей по RDP

Возникают следующие вопросы:

1) Могу ли я посмотреть, из каких учётных записей запущено (или заблокировано) приложение
2) Могу ли я отправить команду приложению в другой учётной записи, например закрыться, или показать какое-то информационное сообщение
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502561
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Создавай серверный socket. Если не удалось - (потому, что уже создан) - шли туда любые команды и/или получай любые ответы.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502570
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я так понял ответ на второй вопрос
Окей а можно ссылки почитать, что за серверный сокет. И не получится ли так, что сообщение "дойдёт" только одному приложению, а не нескольким. И как изменится логика, если создавшее сокет приложение закроется.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502590
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые базы данных могут отсылать сообщения клиентам, например, Oracle или Firebird (если нужна реакция в реальном времени). Можно небольшой сервис держать для этих целей и обмениваться данными с клиентами. В конце концов можно по таймеру актуальную версию проверять и блокировать. А ставить софт надо в пользовательскую папку , а не в общую -- это самое главное. Т.к. всякие бухгалтера любят оставить включенным компьютер-подключение и уйти на обеда или домой, а с утра открыть комп, чтобы было "всё, как вчера".
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502593
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUВот у нас есть софт, который предполагает автообновление
Кроме того, приложение может быть запущено из разных учётных записей по RDP

Возникают следующие вопросы:

1) Могу ли я посмотреть, из каких учётных записей запущено (или заблокировано) приложение
2) Могу ли я отправить команду приложению в другой учётной записи, например закрыться, или показать какое-то информационное сообщение
Навскидку:

1) Из самого приложения или из стороннего обновлятора? Во втором случае потребуются права локального администратора.
2) Например SendMessage WM_QUIT в хэндл Application или Application.MainForm нужного экземпляра приложения. Но, опять же, права локального администратора, чтобы найти нужный процесс и получить его окна.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502599
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpНавскидку:

Но, имхо, лучше сделать обновлятор в виде отдельного сервиса, запускающегося от SYSTEM и какой-нибудь канал для взаимодействия приложения с этим сервисом (Named Pipes?) чтобы он всегда знал сколько экземпляров запущено и мог им сказать закрыться.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502609
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

А как из приложения с правами администратора получить список пользователей, которые заблокировали экзешник?
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502613
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUЭто я так понял ответ на второй вопрос
И на 1-й тоже. GetUserName можно включить в протокол, например.
SOFT FOR YOUОкей а можно ссылки почитать, что за серверный сокет.
socket/bind/listen google
SOFT FOR YOUИ не получится ли так, что сообщение "дойдёт" только одному приложению, а не нескольким.
Конечно, получится, ведь сервер можно создать только один.
Если нужно общатся с несколькими - значит нужно будет делать отдельную прогамму-сервер обновлений, к которой все прогаммы-обновляторы подключаться.
Может так и проще. Я ж не знаю, какая у тебя логика вообще.
SOFT FOR YOUИ как изменится логика, если создавшее сокет приложение закроется.
Получится создать сокет и это будет означать, что это приложение первое.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502614
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUВозникают следующие вопросы:
У каждого пользователя должен быть свой экземпляр.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502615
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Не совсем понятны фразы "заблокировали экзешник", "заблокировано приложение".
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502639
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как делается:
При запуске приложения или или по команде из меню проверяется наличие обновлений, если они есть, предлагается запустить установку обновления и перезапустить приложение после процесса обновления. Пользователь сам решает, когда ему обновляться.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502650
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Да. Но когда стартует инсталер, мы видим, что приложение заблокировано (запущено). А кем именно - не видим. И сделать с этим особо тоже ничего не можем )
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502656
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUДа. Но когда стартует инсталер, мы видим, что приложение заблокировано (запущено). А кем именно - не видим. И сделать с этим особо тоже ничего не можем )
По этому каждому пользователю своя папочка и своё приложение.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502657
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё вопросик назрел
Папка "ProgramData" - привязана к пользователю или она лежит в общем доступе? Писать туда может только админ?
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502684
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUЕщё вопросик назрел
Папка "ProgramData" - привязана к пользователю или она лежит в общем доступе? Писать туда может только админ?
ProramData - это что что раньше было общим для всех %appdata%, писать туда может только админ.
SOFT FOR YOUА как из приложения с правами администратора получить список пользователей, которые заблокировали экзешник?

Получить список всех процессов всех пользователей, отфильтровать по нужному процессу, посмотреть каким пользователям принадлежат запущенные экземпляры. Код не приведу, надо пытать гугл и msdn.
DimaBrПо этому каждому пользователю своя папочка и своё приложение.
Только при условии, что допускается использование разными пользователями разных версий. Иначе если, например, оно работает с базой и между версиями поменялась структура БД, может случиться очень большой УПС.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502698
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUschi,

Да. Но когда стартует инсталер, мы видим, что приложение заблокировано (запущено). А кем именно - не видим. И сделать с этим особо тоже ничего не можем )

Если приложение запускается многими пользователями из централизованного хранилища, то вопрос обновления решается, обычно, административно.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502699
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,
Понятно примерно, что ты хочешь.
DimaBrSOFT FOR YOUДа. Но когда стартует инсталер, мы видим, что приложение заблокировано (запущено). А кем именно - не видим. И сделать с этим особо тоже ничего не можем )
По этому каждому пользователю своя папочка и своё приложение.

Приблизительный алгоритм действий:
1. Ставишь в одну папку, все пользователи запускают из неё;
2. При запуске создаешь mutex с именем 'Global\SOFT_FOR_YOU_MUTEX_SUPERPROGRAM_FIRST_RUN'. Если после этого GetLastError <> ERROR_ALREADY_EXISTS - значит запуск первый, иначе - не первый; закрываем этот mutex;
3. Создаем event с именем 'Global\SOFT_FOR_YOU_EVENT_SUPERPROGRAM_UPDATED';
4. Запускаешь поток, который ждет WaitForMultiply( INFINITE ) этот event и event, который выставляется в главном потоке перед закрытием приложения. Если Wait закончился и это не закрытие приложения - выдаем сообщение, что необходимо перезапуститься (или принудительно это делать, тут уж зависит от желания).
5. Если запуск первый - проверяем и если надо тянем обновление, после вытяжки переименовываем Application.ExeName в Application.ExeName + '_old'; Делаем SetEvent( Global\SOFT_FOR_YOU_EVENT_SUPERPROGRAM_UPDATED ).
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502704
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockSOFT FOR YOU,
Понятно примерно, что ты хочешь.
Приблизительный алгоритм действий:
...
2. При запуске создаешь mutex с именем 'Global\SOFT_FOR_YOU_MUTEX_SUPERPROGRAM_FIRST_RUN'. Если после этого GetLastError <> ERROR_ALREADY_EXISTS - значит запуск первый, иначе - не первый; закрываем этот mutex;
А если запущено 5 экземпляров, но тут закрыли первое приложение?... ИМХО, надо не закрывать мутекс, а сначала пытаться открыть, и при остуствии - создавать. И держать открытым. Тогда он сам удалится только при закрытии последнего экземпляра приложения.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502705
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если предполагается, что программы будут редко перезапускаться и постоянно висеть - то значит пункты 2 и 5 лучше вынести в отдельный поток и запускать его всегда и постоянно (п. 5 вызывать в нем если GetLastError <> ERROR_ALREADY_EXISTS).
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502711
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpА если запущено 5 экземпляров, но тут закрыли первое приложение?
Выше ответил уже)
alekcvpИМХО, надо не закрывать мутекс...И держать открытым.
Да, конечно, не надо, тут я не то написал написал. Хотя тут в этом варианте 20711214 можно и закрывать.
alekcvpа сначала пытаться открыть, и при остуствии - создавать.
Нет, иначе двое не смогут открыть и создадут, т.ч. это то же самое.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502712
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,
А, понял. Не сразу въехал в алгоритм.
Приложение не сможет обновить себя само, потому что у пользователя прав не хватит для записи, так что ИМХО без отдельного сервиса не обойтись.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502715
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockНет, иначе двое не смогут открыть и создадут, т.ч. это то же самое.
Там от флагов зависит, создать может только один (он и будет хозяином), а открыть - многие, и он будет существовать пока его последний не закроет (или не закроется сам).
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502717
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpтак что ИМХО без отдельного сервиса не обойтись.
Бывает что да.
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502752
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUМогу ли я посмотреть, из каких учётных записей запущено (или заблокировано) приложение

У Вас terminal server?
Есть хорошая дока от MS: https://technet.microsoft.com/en-us/library/cc751287.aspx
так же даю ссылку на топик, в котором я выкладывал и свой код на эту тему 984276
...
Рейтинг: 0 / 0
Проблема обновления софта, запущенного из разных учётных записей
    #39502758
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpYuRockНет, иначе двое не смогут открыть и создадут, т.ч. это то же самое.
Там от флагов зависит, создать может только один (он и будет хозяином), а открыть - многие, и он будет существовать пока его последний не закроет (или не закроется сам).
С такими флагами при одновременном вызове CreateMutex вернет не NULL только одной программе. Тоже не подходит.
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Проблема обновления софта, запущенного из разных учётных записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]