Уведомить машину Windows в сети без имени пользователя и пароля

Постановка проблемы:

Предположим, что в локальной сети есть 20 компьютеров с Windows. Одна из машин служит сервером и содержит базу данных. Теперь остальные 19 машин имеют доступ для чтения с сервера, но сервер не имеет имени пользователя и пароля ни для одного из других 19 компьютеров.

Мне нужно обновить настольное приложение, установленное на всей машине. Существует приложение весенней загрузки, размещенное на сервере, которое загружает сборку. Теперь, как только я загружаю сборку, я должен уведомить все остальные 19 машин, что сборка была загружена, чтобы они могли прочитать и обновить себя.

  • Решение 1. Установите службу Windows, которая будет опрашивать сервер и проверять наличие обновлений.

  • Решение 2. Разместите веб-API POST на 19 компьютерах и уведомите их, выполнив почтовый вызов. Я думаю, что установка IIS или Tomcat на каждую машину нецелесообразна.

Есть ли другое оптимальное решение для уведомления клиента?

Примечание. Мы не можем использовать RDP и у нас нет учетных данных, но мы можем использовать уже развернутое приложение Windows на других 19 клиентах.


person Prashant Singh    schedule 19.12.2017    source источник
comment
Решение 1 — обычный способ. Действуй.   -  person Oliver    schedule 19.12.2017
comment
@Oliver, ситуация здесь такова, что мы должны обновляться раз в 3 месяца. И обычно у нас есть временной интервал для обновления, например, с 1 до 2 часов ночи. Не кажется ли вам, что поддерживать службу Windows, которая будет опрашивать каждые 10 минут задачу, запланированную раз в 3 месяца, - это излишество?   -  person Prashant Singh    schedule 19.12.2017


Ответы (2)


Решение 3. Если ваши компьютеры находятся в одном домене, используйте установочные пакеты msi для обновления программного обеспечения. по всему домену с помощью групповой политики. Это обычный способ.

Решение 4. Запустите настольное приложение непосредственно из общей папки сервера. Это работает хорошо, когда сервер всегда доступен, а приложение не слишком тяжело для вашей локальной сети.

Здесь вам нужно позаботиться о написании новых файлов приложения во время его работы на клиентских компьютерах. Хороший способ - сохранить разные папки для разных версий и запустить с ярлыком, указывающим на последнюю версию:

v1.3\app files here
v1.4\app files here
v1.4.6\app files here
v1.7\app files here
app.lnk → v1.7\app.exe

клиентские машины запускают приложение с app.lnk.

Upd: если вы обновляете приложение, когда никто не работает (см. 1:00…2:00), вы можете опустить все эти вещи с управлением версиями.

Решение 1. Это тоже работает. Вы можете использовать NSSM, чтобы легко запустить сценарий обновления или исполняемый файл как службу Windows.

person Peter Taran    schedule 19.12.2017
comment
И, конечно же, Решение 5: запланированный запуск задачи обновления. См. команду at или графический интерфейс Планировщика заданий Windows. - person Peter Taran; 20.12.2017

Я бы использовал службу Windows или запланированную задачу (оба могут быть одним и тем же приложением, которое вы предоставляете, но с некоторыми аргументами). Он часто проверяет, доступна ли новая версия (может быть, только один раз в день).

Если у вас есть только короткий промежуток времени, когда новая версия должна быть установлена ​​на всех компьютерах, вы также можете указать дату установки вместе с новой версией. (Возможно, проверка будет выполняться через REST API, где клиент отправляет текущий номер установленной версии, а сервер отвечает кодом состояния 200, а тело либо пусто, либо предоставляет объект json, содержащий новый номер версии, дату выполнения и URL для скачивания.)

Затем клиент уже может загрузить новую версию и сделать ее доступной на машине, но он инициирует установку только тогда, когда наступит срок. Эта проверка срока может происходить чаще, потому что вся информация уже находится на клиентской машине и может быть выполнена локально.

person Oliver    schedule 19.12.2017