Melhor abordagem para implantar atualizações de arquivos DLL em clientes Win7

Melhor abordagem para implantar atualizações de arquivos DLL em clientes Win7

Estamos em um ambiente de domínio Windows 7/Server 2008 R2. Temos um aplicativo .NET com muitas bibliotecas internas para diferentes UI e outros recursos. Nós o implantamos a partir de um compartilhamento onde um diretório é criado para cada “lançamento” com o número da versão mais recente. Ocasionalmente, há alguns departamentos que precisam de algo ajustado no aplicativo para suas necessidades específicas e precisam da mudança urgentemente antes do próximo lançamento. Podemos fazer isso fornecendo a eles alguns arquivos DLL personalizados com as alterações solicitadas. Estou tentando desenvolver a maneira mais confiável e eficiente de fazer com que nossas máquinas clientes verifiquem e copiem automaticamente esses arquivos "personalizados". Quero fazer isso da maneira mais eficiente, confiável, gerenciada centralmente e com o mínimo de sobrecarga para os clientes. De preferência, quando tivermos arquivos personalizados para implantar, gostaríamos que todos os clientes os copiem dentro de 24 horas após colocá-los no compartilhamento. Eles iriam para uma subpasta do diretório de lançamento da rede atual, chamada "Personalizado" ou algo semelhante. Não temos SCCM no momento, então estou analisando as seguintes opções:

  1. Script de logon de arquivo em lote para usuários que verificarão o diretório de rede e copiarão (sobrescreverão) arquivos locais usando robocopy ou xcopy. Isso exigiria que o usuário fizesse logoff e logon novamente, portanto, poderia haver um atraso na obtenção de arquivos personalizados. Os usuários teriam uma maneira fácil e confiável de acioná-lo, o que seria uma vantagem.

  2. Tarefa agendada configurada por meio do item Preferência de Política de Grupo, para verificar o diretório de rede, talvez algumas vezes por dia, em busca de arquivos personalizados. Isso pode obter o arquivo mais rapidamente do que um script de logon do usuário, mas não tenho experiência com itens de tarefas agendadas do GPP. É confiável e simples de configurar e manter? Novamente, esta tarefa executaria um script em lote para verificar arquivos na rede e iniciaria o robocopy com a opção /xo. Se colocarmos algum arquivo no diretório customizado, assumiremos que ele é necessário, independentemente das versões. A simples verificação das datas dos arquivos deve funcionar, para que eles não sejam copiados repetidamente quando estiverem no lugar.

  3. Uma tarefa agendada igual à acima, mas acionada com base em uma entrada de log de eventos. Isso é confiável? Eu nunca provei. Pode ser vantajoso encontrar um gatilho de evento que indique que o aplicativo acabou de ser iniciado (ou fechado) e, em seguida, copiar os arquivos imediatamente para que haja menos chances de o trabalho do usuário ser interrompido.

  4. Eu sei que também existe um item de Preferência de Política de Grupo para gerenciar/copiar arquivos. Acredito que seria muito trabalhoso gerenciar neste caso, porque poderia haver a possibilidade de vários arquivos ao mesmo tempo, em várias versões do aplicativo.

  5. Também considerei um script Powershell, que poderia fazer coisas interessantes, como comparar as versões reais do arquivo DLL, etc., mas isso provavelmente exigirá mais sobrecarga de recursos (execução mais lenta) e está realmente fazendo mais do que o necessário.

Alguma outra idéia sobre o que pode funcionar melhor? A resposta mais simples (script de logon do usuário) é realmente a melhor aqui?

Responder1

Acabei optando pela opção nº 1, um script de logon do usuário, e isso já funciona de maneira confiável há algum tempo. Eu postaria o script inteiro aqui, mas ele está cheio de detalhes internos do aplicativo que o tornariam praticamente inútil para uso geral. O detalhe mais interessante é que estamos usando wmic para obter o número da versão interna do aplicativo instalado localmente e para nos referir ao diretório de versão correto em nosso servidor de implantação. Este código define uma variável chamada Version para corresponder ao valor retornado de 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"

informação relacionada