Лучший подход к развертыванию обновлений DLL-файлов на клиентах Win7

Лучший подход к развертыванию обновлений DLL-файлов на клиентах Win7

Мы находимся в доменной среде Windows 7 / Server 2008 R2. У нас есть приложение .NET с большим количеством внутренних библиотек для различных пользовательских интерфейсов и других функций. Мы развертываем его из общего ресурса, где для каждого «релиза» создается каталог с последним номером версии. Иногда есть некоторые отделы, которым нужно что-то подправить в приложении для их конкретных нужд, и им нужно срочно внести изменения перед следующим релизом. Мы можем сделать это, предоставив им некоторое количество пользовательских файлов DLL с запрошенными изменениями в них. Я пытаюсь разработать наиболее надежный и эффективный способ, чтобы наши клиентские машины автоматически проверяли и копировали эти «пользовательские» файлы. Я хочу сделать это наиболее эффективным, надежным, централизованно управляемым способом и с наименьшими накладными расходами для клиентов. Предпочтительно, когда у нас есть пользовательские файлы для развертывания, мы хотели бы, чтобы все клиенты копировали их в течение 24 часов после того, как мы поместим их в общий ресурс. Они будут находиться в подпапке текущего сетевого каталога релиза, названной «Пользовательский» или как-то похоже. На данный момент у нас нет SCCM, поэтому я рассматриваю следующие варианты:

  1. Пакетный файл сценария входа для пользователей, который будет проверять сетевой каталог и копировать (перезаписывать) локальные файлы с помощью robocopy или xcopy. Это потребует от пользователя выхода из системы и повторного входа, поэтому может возникнуть задержка в получении любых пользовательских файлов. У пользователей будет простой и надежный способ запустить его, что будет плюсом.

  2. Запланированная задача, настроенная через элемент Group Policy Preference, для проверки сетевого каталога, возможно, несколько раз в день на наличие пользовательских файлов. Это может получить файл быстрее, чем сценарий входа пользователя, но у меня нет опыта работы с элементами GPP Scheduled Task. Является ли она надежной и простой в настройке и обслуживании? Опять же, эта задача запустит пакетный сценарий для проверки файлов в сети и запустит robocopy с параметром /xo. Если мы поместим какие-либо файлы в пользовательский каталог, мы предположим, что они нужны, независимо от версий. Простая проверка дат файлов должна сработать, поэтому они не будут повторно копироваться снова и снова, как только окажутся на месте.

  3. Запланированная задача, та же, что и выше, но запускаемая на основе записи журнала событий. Надежно ли это? Я никогда не пробовал. Может быть полезно найти триггер события, который указывал бы, что приложение было только что запущено (или закрыто), а затем сразу же скопировать файлы, чтобы уменьшить вероятность прерывания работы пользователя.

  4. Я знаю, что есть также элемент Group Policy Preference для управления/копирования файлов. Я считаю, что в этом случае это будет слишком большой работой, поскольку может быть потенциал для нескольких файлов одновременно, в нескольких версиях приложения.

  5. Я также рассматривал скрипт Powershell, который мог бы делать интересные вещи, например, сравнивать фактические версии DLL-файлов и т. д., но это, вероятно, потребует больше ресурсов (будет работать медленнее) и на самом деле делает больше, чем нужно.

Есть еще идеи, что может сработать лучше всего? Действительно ли самый простой ответ (скрипт входа пользователя) здесь лучший?

решение1

Я в итоге выбрал вариант № 1, скрипт входа пользователя, и он надежно работает уже некоторое время. Я бы опубликовал весь скрипт здесь, но он полон внутренних деталей приложения, которые делают его практически бесполезным для общего использования. Самая интересная деталь заключается в том, что мы используем wmic для получения внутреннего номера версии локально установленного приложения и используем его для ссылки на правильный каталог версий на нашем сервере развертывания. Этот код устанавливает переменную с именем Version для соответствия значению, возвращаемому wmic.exe

set "myfile=c:\\progra~2\\%AppFolder%\\AppName.exe"

for /f "tokens=*" %%f in ('wmic datafile where "name='%myfile%'" get version /value ^| findstr "="') do set "%%f"

Связанный контент