|
|
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
Вот у нас есть софт, который предполагает автообновление Кроме того, приложение может быть запущено из разных учётных записей по RDP Возникают следующие вопросы: 1) Могу ли я посмотреть, из каких учётных записей запущено (или заблокировано) приложение 2) Могу ли я отправить команду приложению в другой учётной записи, например закрыться, или показать какое-то информационное сообщение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 13:37:01 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Создавай серверный socket. Если не удалось - (потому, что уже создан) - шли туда любые команды и/или получай любые ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 13:42:29 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
Это я так понял ответ на второй вопрос Окей а можно ссылки почитать, что за серверный сокет. И не получится ли так, что сообщение "дойдёт" только одному приложению, а не нескольким. И как изменится логика, если создавшее сокет приложение закроется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 13:54:48 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
Некоторые базы данных могут отсылать сообщения клиентам, например, Oracle или Firebird (если нужна реакция в реальном времени). Можно небольшой сервис держать для этих целей и обмениваться данными с клиентами. В конце концов можно по таймеру актуальную версию проверять и блокировать. А ставить софт надо в пользовательскую папку , а не в общую -- это самое главное. Т.к. всякие бухгалтера любят оставить включенным компьютер-подключение и уйти на обеда или домой, а с утра открыть комп, чтобы было "всё, как вчера". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 14:10:10 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUВот у нас есть софт, который предполагает автообновление Кроме того, приложение может быть запущено из разных учётных записей по RDP Возникают следующие вопросы: 1) Могу ли я посмотреть, из каких учётных записей запущено (или заблокировано) приложение 2) Могу ли я отправить команду приложению в другой учётной записи, например закрыться, или показать какое-то информационное сообщение Навскидку: 1) Из самого приложения или из стороннего обновлятора? Во втором случае потребуются права локального администратора. 2) Например SendMessage WM_QUIT в хэндл Application или Application.MainForm нужного экземпляра приложения. Но, опять же, права локального администратора, чтобы найти нужный процесс и получить его окна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 14:12:14 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
alekcvpНавскидку: Но, имхо, лучше сделать обновлятор в виде отдельного сервиса, запускающегося от SYSTEM и какой-нибудь канал для взаимодействия приложения с этим сервисом (Named Pipes?) чтобы он всегда знал сколько экземпляров запущено и мог им сказать закрыться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 14:15:06 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
alekcvp, А как из приложения с правами администратора получить список пользователей, которые заблокировали экзешник? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 14:23:02 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЭто я так понял ответ на второй вопрос И на 1-й тоже. GetUserName можно включить в протокол, например. SOFT FOR YOUОкей а можно ссылки почитать, что за серверный сокет. socket/bind/listen google SOFT FOR YOUИ не получится ли так, что сообщение "дойдёт" только одному приложению, а не нескольким. Конечно, получится, ведь сервер можно создать только один. Если нужно общатся с несколькими - значит нужно будет делать отдельную прогамму-сервер обновлений, к которой все прогаммы-обновляторы подключаться. Может так и проще. Я ж не знаю, какая у тебя логика вообще. SOFT FOR YOUИ как изменится логика, если создавшее сокет приложение закроется. Получится создать сокет и это будет означать, что это приложение первое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 14:25:36 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUВозникают следующие вопросы: У каждого пользователя должен быть свой экземпляр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 14:26:04 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Не совсем понятны фразы "заблокировали экзешник", "заблокировано приложение". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 14:26:59 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
Как делается: При запуске приложения или или по команде из меню проверяется наличие обновлений, если они есть, предлагается запустить установку обновления и перезапустить приложение после процесса обновления. Пользователь сам решает, когда ему обновляться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 14:52:42 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
schi, Да. Но когда стартует инсталер, мы видим, что приложение заблокировано (запущено). А кем именно - не видим. И сделать с этим особо тоже ничего не можем ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:00:43 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUДа. Но когда стартует инсталер, мы видим, что приложение заблокировано (запущено). А кем именно - не видим. И сделать с этим особо тоже ничего не можем ) По этому каждому пользователю своя папочка и своё приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:03:42 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
Ещё вопросик назрел Папка "ProgramData" - привязана к пользователю или она лежит в общем доступе? Писать туда может только админ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:03:43 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUЕщё вопросик назрел Папка "ProgramData" - привязана к пользователю или она лежит в общем доступе? Писать туда может только админ? ProramData - это что что раньше было общим для всех %appdata%, писать туда может только админ. SOFT FOR YOUА как из приложения с правами администратора получить список пользователей, которые заблокировали экзешник? Получить список всех процессов всех пользователей, отфильтровать по нужному процессу, посмотреть каким пользователям принадлежат запущенные экземпляры. Код не приведу, надо пытать гугл и msdn. DimaBrПо этому каждому пользователю своя папочка и своё приложение. Только при условии, что допускается использование разными пользователями разных версий. Иначе если, например, оно работает с базой и между версиями поменялась структура БД, может случиться очень большой УПС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:29:27 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUschi, Да. Но когда стартует инсталер, мы видим, что приложение заблокировано (запущено). А кем именно - не видим. И сделать с этим особо тоже ничего не можем ) Если приложение запускается многими пользователями из централизованного хранилища, то вопрос обновления решается, обычно, административно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:46:58 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
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 ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:47:39 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
YuRockSOFT FOR YOU, Понятно примерно, что ты хочешь. Приблизительный алгоритм действий: ... 2. При запуске создаешь mutex с именем 'Global\SOFT_FOR_YOU_MUTEX_SUPERPROGRAM_FIRST_RUN'. Если после этого GetLastError <> ERROR_ALREADY_EXISTS - значит запуск первый, иначе - не первый; закрываем этот mutex; А если запущено 5 экземпляров, но тут закрыли первое приложение?... ИМХО, надо не закрывать мутекс, а сначала пытаться открыть, и при остуствии - создавать. И держать открытым. Тогда он сам удалится только при закрытии последнего экземпляра приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:51:50 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
Если предполагается, что программы будут редко перезапускаться и постоянно висеть - то значит пункты 2 и 5 лучше вынести в отдельный поток и запускать его всегда и постоянно (п. 5 вызывать в нем если GetLastError <> ERROR_ALREADY_EXISTS). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:52:13 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
alekcvpА если запущено 5 экземпляров, но тут закрыли первое приложение? Выше ответил уже) alekcvpИМХО, надо не закрывать мутекс...И держать открытым. Да, конечно, не надо, тут я не то написал написал. Хотя тут в этом варианте 20711214 можно и закрывать. alekcvpа сначала пытаться открыть, и при остуствии - создавать. Нет, иначе двое не смогут открыть и создадут, т.ч. это то же самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:58:42 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
alekcvp, А, понял. Не сразу въехал в алгоритм. Приложение не сможет обновить себя само, потому что у пользователя прав не хватит для записи, так что ИМХО без отдельного сервиса не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:58:42 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
YuRockНет, иначе двое не смогут открыть и создадут, т.ч. это то же самое. Там от флагов зависит, создать может только один (он и будет хозяином), а открыть - многие, и он будет существовать пока его последний не закроет (или не закроется сам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 16:00:14 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
alekcvpтак что ИМХО без отдельного сервиса не обойтись. Бывает что да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 16:01:17 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOUМогу ли я посмотреть, из каких учётных записей запущено (или заблокировано) приложение У Вас terminal server? Есть хорошая дока от MS: https://technet.microsoft.com/en-us/library/cc751287.aspx так же даю ссылку на топик, в котором я выкладывал и свой код на эту тему 984276 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 16:43:32 |
|
||
|
Проблема обновления софта, запущенного из разных учётных записей
|
|||
|---|---|---|---|
|
#18+
alekcvpYuRockНет, иначе двое не смогут открыть и создадут, т.ч. это то же самое. Там от флагов зависит, создать может только один (он и будет хозяином), а открыть - многие, и он будет существовать пока его последний не закроет (или не закроется сам). С такими флагами при одновременном вызове CreateMutex вернет не NULL только одной программе. Тоже не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 16:46:46 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39502758&tid=2041947]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
211ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 550ms |

| 0 / 0 |
