Aplicativo de atualização automática - filosofia

15

Esta é uma questão filosófica.

Dado um aplicativo de área de trabalho hipotético e o desejo de fornecer atualizações automáticas (em vez de forçar as pessoas a irem a um site, verifique se há uma atualização, faça o download de uma atualização, instale), qual dos dois é mais uma abordagem de "prática recomendada"?

  1. Como o iTunes , ele verifica se há uma nova versão e solicita ao usuário que baixe a nova versão. Nesse caso, ele baixa um executável de instalação completa (nesse caso, um arquivo do Windows Installer (.msi)) que instala a versão completa (não apenas uma atualização para a versão anterior - é demais para gerenciar se houver várias versões disponíveis) . Então, digamos, é a versão 10.1.1 - se você está instalando novo ou atualizando, usa o mesmo arquivo. Após o download, ele instrui o usuário a fechar o aplicativo e executar o arquivo de instalação.

  2. Semelhante à outra, verifica se há uma nova versão e solicita que o usuário faça o download, mas, em vez de apenas baixar um executável e solicitar ao usuário que o execute, ele realmente executa para eles - desligando o programa que eles abriram, adquirindo a segurança necessária para instalar arquivos.

Problemas com o número 2: muitos problemas relacionados ao fechamento do programa, já que o programa pode abrir outros programas ( Outlook e Excel ) ou se o usuário estivesse no meio de alguma coisa. Também em torno da segurança, você precisa de acesso de administrador local para instalar, e se você não o possuir? Nas versões posteriores do Windows, você não pode simplesmente substituir a segurança da pessoa.

Problemas com o número 1: algumas pessoas acreditam que isso será muito difícil, muito esforço para o usuário final.

Eu preferiria ir com o número 1, pois economizará de 80 a 120 horas no meu projeto e é mais simples de implementar e manter. No entanto, temos pessoas que se sentem fortemente por todos os lados.

Qual é a melhor prática para esse tipo de coisa?

Shannon Davis
fonte
Não tenho tanta certeza de que seja filosófico, parece que ela está procurando uma solução para mim.
Portanto, não há problema em fazer perguntas sobre design / arquitetura aqui?
Minha pergunta é: por que o nº 2 exige que o programa seja desligado e reiniciado? Se for uma atualização de segurança, é compreensível, mas um usuário normal fecha e reabre um programa pelo menos uma vez por dia, se não mais, por que não instalá-lo em segundo plano, deixe o usuário executar o programa usando a versão mais antiga na memória e, quando reiniciarem, use a nova versão instalada. Sem barulho, sem aborrecimentos.
Mike S
@ Mike S: isso não é possível no Windows (não é possível sobrescrever arquivos executáveis ​​em execução) e mesmo no Linux não é uma boa idéia (se você abrir outra instância, terá um executando o código antigo e outro executando o novo código - se houver algum acontecimento IPC, é ainda pior)
Dean Harding
Por experiência: se você procurar por atualizações, não faça seu programa diariamente à meia-noite ou às 15h. Isso parece razoável, mas você encerra o DDOS em seus próprios servidores. Basta adicionar até 3600 segundos de aleatoriedade; não é que urgente.
MSalters

Respostas:

20

Pessoalmente, gosto bastante da abordagem do Google Chrome. Um diretório base com um iniciador e subdiretórios para cada versão instalada do software. O iniciador apenas procura o número de versão mais alto e o utiliza e exclui versões anteriores, conforme necessário. Uma tarefa do atualizador é executada com frequência para baixar e criar novos diretórios. Quando novas versões são instaladas, o aplicativo em execução solicita uma reinicialização para usar a nova versão.

Pedaços de bacon
fonte
4
+1 por apontar o bom comportamento do Google. O contraste é o Adobe Acrobat Reader que, a cada 2 dias, é necessário instalar alguns patches aparentemente urgentes e atrapalha a pessoa continuamente no trabalho.
Ingo
Eu também gosto dessa abordagem. A desvantagem é que ele funciona apenas para instalações por usuário que não exigem elevação. Depois de receber um prompt de elevação, não importa realmente se você precisa de mais alguns cliques para executar a atualização (não é mais silencioso).
@ Cosmin, se você não quiser usar% appdata%, poderá usar% ProgramData% para armazenar os arquivos baixados. Uma maneira mais filosoficamente correta seria armazenar o arquivo ali e, em seguida, elevar para instalar na próxima vez que o programa for executado.
Bacon Bits
AMOR esta resposta e eu estou colocando isso no meu back-pocket (por agora, o "iTunes" Download de estilo tem encontrado amplo apelo por razões de redução de custos.)
Shannon Davis
3

Você não deve criar entradas de inicialização desnecessárias para verificar se há atualizações como o Adobe Flash Player (é difícil rastreá-las todas e não consigo descobrir uma maneira de desativar as verificações ...) ou o iTunes. Irrita o usuário (geeks, de qualquer maneira). Uma opção melhor seria procurar atualizações na inicialização do aplicativo, como o Firefox faz .

Um simples "Instalar atualizações?" janela não incomodará os usuários. Deixe-o atualizar em segundo plano enquanto o usuário faz outras coisas e, em seguida, inicie seu aplicativo automaticamente.

Apenas certifique-se de incluir uma opção:

Verifique se há atualizações em:

  • Logon (se você quiser irritar os geeks)
  • Aplicação de arranque ( on por padrão)
  • A cada poucas semanas ( desativado por padrão)

Ou algo parecido.


Se vale a pena o esforço, eu diria que vá em frente. Essa é sua decisão.

Mateen Ulhaq
fonte
2

Eu acho que você quer uma instalação "ClickOnce".

http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

O ClickOnce é uma tecnologia de implantação que permite criar aplicativos baseados no Windows com atualização automática que podem ser instalados e executados com o mínimo de interação do usuário. A implantação do ClickOnce supera três problemas principais na implantação:

Dificuldades na atualização de aplicativos. Com a implantação do Microsoft Windows Installer, sempre que um aplicativo é atualizado, o usuário deve reinstalar o aplicativo inteiro; com a implantação do ClickOnce, você pode fornecer atualizações automaticamente. Somente as partes do aplicativo que foram alteradas são baixadas e, em seguida, o aplicativo atualizado completo é reinstalado a partir de uma nova pasta lado a lado.

Impacto no computador do usuário. Com a implantação do Windows Installer, os aplicativos geralmente dependem de componentes compartilhados, com o potencial de conflitos de versão; com a implantação do ClickOnce, cada aplicativo é independente e não pode interferir com outros aplicativos.

Permissões de segurança. A implantação do Windows Installer requer permissões administrativas e permite apenas uma instalação limitada do usuário; A implantação do ClickOnce permite que usuários não administrativos instalem e concede apenas as permissões de Segurança de Acesso ao Código necessárias para o aplicativo.


fonte
Essa não era uma questão dos prós e contras do clique uma vez e do MSI (para o qual muitas de suas conclusões estão incorretas e / ou incompletas), mas uma questão de práticas recomendadas para soluções de atualização automática.
Christopher Painter
Aprecio essas informações de qualquer maneira e as compartilharei com o desenvolvedor para ver se ele as considerou uma opção - talvez ele tenha achado que teria que desenvolver o processo de atualização.
Bem, Christopher, aceite o MS, isso é direto do MSDN. Esse é realmente um comentário útil também.
Quando codifica para tecnologias de implantação, nunca me surpreende quando alguém postando no MSDN entende errado. Existem muito poucos especialistas que realmente entendem essas coisas.
21911 Christopher Christopher Pintor
2

Pessoalmente, apreciei aplicativos que fazem algo semelhante ao framework Sparkle . Eu acho que é apenas uma coisa do Mac, mas basicamente faz o seguinte (em cima da minha cabeça - presumo que o comportamento possa ser ajustado).

  1. Verifique se há atualização (geralmente na inicialização do aplicativo)
  2. Se houver, uma janela separada será mostrada com um log de alterações bem formatado
  3. O usuário pode então pular essa versão, instalá-la ou optar por ser lembrado mais tarde
  4. Se ele decidir instalar o aplicativo, uma barra de progresso será exibida abaixo do registro de alterações
  5. Após o download, o usuário pode decidir sair do aplicativo e instalá-lo imediatamente ou instalar após ele sair do aplicativo

Considerando que você está falando sobre .msi, essa estrutura específica não é realmente aplicável, mas neste caso eu preferiria usar alguma solução existente do que reinventar a roda.

sebastiangeiger
fonte
1

Eu diria que você realmente precisa conhecer seu usuário. Se eles são experientes e / ou têm um interesse intenso em manter-se atualizado, o número 1 funcionará.

Nunca subestime a preguiça de um usuário, porque quando o programa não funcionar mais porque não há mais suporte, você será inundado com as chamadas de suporte técnico mais tarde.

O tempo virá do desenvolvimento (# 2) ou do suporte (# 1).

maple_shaft
fonte
1

Que tal isso?

  • Na inicialização do aplicativo, verifique se há uma nova versão e (opcionalmente após solicitar ao usuário) faça o download.
  • Quando o download terminar, forneça um botão para o usuário que permita reinstalar e reiniciar o aplicativo (não use caixa de diálogo, a menos que a atualização seja crítica).
  • No encerramento do aplicativo, (opcionalmente depois de perguntar ao usuário), inicie o instalador. Caso o usuário se recuse a instalar neste momento (talvez esteja com pressa), faça-o na próxima vez antes de o aplicativo iniciar.

Você não precisa incomodar o usuário, não precisa fechar nada ...

maaartinus
fonte
1

Por que não algo no meio?

Solicite o download (ou faça a opção "baixar automaticamente"), após concluir o prompt para instalar a atualização baixada (execute o arquivo .msi). Dessa forma, você nega a desvantagem do nº 2 (fechando no meio do trabalho do usuário) e ainda mantendo o conforto com o custo de mais 1 clique.

A caixa de diálogo " Fechar e instalar atualização? " Deve ser facilmente acessível (mas não irritante) quando o usuário recusar primeiro. Com "Iniciar <nome do programa>?" A caixa de seleção no final de .msi será quase como a segunda, com pouco mais trabalho

@ security Os
programas no Windows moderno podem solicitar permissão para executar ações que exigem direitos de administrador (o usuário é exibido perguntando onde ele digita a senha de administrador e, em seguida, seleciona "sim / não" para conceder a permissão)

NoxArt
fonte
1

Tenho 124 casas de penhores que usam meu aplicativo de gerenciamento de casa de penhores. Sempre que tenho uma nova atualização, transmito um email para eles, informando sobre a atualização e os detalhes dela. Então eles têm a opção de enviá-lo por FTP, entrando no meu site. Eles também têm a opção de reverter a atualização. Meu site também acompanha a versão instalada de cada casa de penhores.

Frank R.
fonte