Por que o Windows Installer pode instalar apenas um programa por vez?


10

Sempre me perguntei por que o Windows Installer permite que você instale apenas um programa por vez. É muito frustrante não poder iniciar várias instalações, especialmente ao configurar uma nova instalação do Windows. Qual a razão disso?

Respostas:


6

Seria muito complexo garantir a correção quando ocorrerem instalações simultâneas - supondo que eles compartilhem alguns dos arquivos. Isso precisaria de alguma forma de transações.

  • Você precisa bloquear arquivos
  • Deve ser possível desfazer alterações intermediárias, se a instalação falhar (não tenho certeza, se isso é possível agora?)

Esses conceitos são conhecidos nos bancos de dados transacionais - mas o tópico não é trivial e você geralmente não encontra uma infraestrutura totalmente transacional nos sistemas de arquivos (mesmo que os sistemas de arquivos de registro em diário façam parte disso). Um problema é que vários bloqueios podem levar a um impasse - então você precisa de uma detecção de impasse (ou ambos os instaladores serão interrompidos para sempre) e uma maneira de tratar isso. Os bloqueios podem ser evitados (por exemplo, sempre bloqueando arquivos na mesma ordem), mas existem outros problemas:

Se você bloquear todos os arquivos necessários com antecedência, obterá efetivamente o que possui: Um instalador deve esperar até que o outro termine. Se você não bloquear todos os arquivos necessários com antecedência e continuar, corre o risco de a "transação" falhar. Isso significaria que um dos instaladores teria que ser reiniciado.

Talvez você precise pensar nos níveis de isolamento de transação - para estar totalmente correto, suas transações teriam que ser "serializáveis" - mas isso não é fácil, mesmo para muitos bancos de dados.

Pode até haver estratégias alternativas para lidar com os problemas, que contornam o isolamento total, mas geralmente seria ainda mais difícil provar sua correção.

Acredito que, com a instalação simultânea, teríamos muito mais problemas pós-instalação intratáveis ​​- especialmente porque não acho que um fornecedor de SO (ou uma distribuição) passaria por todos os problemas para torná-lo 100% limpo. Então, eu preferiria não usá-lo, mesmo que fosse oferecido pelo sistema operacional.

Nota

Mas talvez o que você realmente queira nem esteja instalando "ao mesmo tempo". Talvez seja suficiente, se você puder enfileirar as instalações, que são executadas uma após a outra (idealmente sem fazer perguntas no meio). E isso é realmente algo, alguns outros sistemas operacionais (distribuições) lidam muito melhor.


1
Embora correta, essa resposta me parece muito detalhada. Alguém perguntando por que o serviço instalador funciona da maneira que funciona provavelmente não entenderá esta resposta.
precisa saber é o seguinte

2
@gWaldo: Ok, talvez você esteja certo ... Então, novamente, não quero apenas dizer "É complexo, acredite em mim (ponto final). Você não entenderia mesmo". Talvez o OP (ou alguém que tropeça nessa questão) esteja realmente interessado, e uma resposta que chegue ao fundo do problema o ajude a estimar, se houver realmente muita complexidade envolvida para resolver algo que parece tão fácil em seu superfície. Quem sabe?
precisa

Muito verdadeiro. Este é um bom ponto.
precisa saber é o seguinte

Embora toda a conversa sobre isolamento pareça plausível, você pode executar vários instaladores se eles não usarem a estrutura do Windows Installer. Eu nunca tive nenhum deles quebrado ao executar lado a lado ... Talvez eu tenha sorte :) Quanto às instalações de enfileiramento, existem ferramentas para isso, mas com CPUs multicore (diabos, as CPUs de desktop agora podem executar 8 threads) ...), parece que executá-los lado a lado seria a resposta (embora eles ainda possam lutar por E / S).
Rytis

2
@Rytis: Eu gostaria de ter a mesma sorte :-) - Os instaladores quebraram aleatoriamente, mesmo sem executá-los simultaneamente. Sobre multicores: haveria outra maneira de utilizá-los: usando vários núcleos em um processo de instalação. Isso nem sempre é possível ou fácil, mas pode ser coordenado muito melhor. No geral, eu acho que a maior economia de tempo ainda é, se todo o processo de instalação (fila) só fizer perguntas no início e no final. Depois, você pode tomar um café ou fazer outra coisa enquanto a instalação é executada (e utilizar os núcleos restantes para o que você quiser fazer).
precisa saber é o seguinte

6

Isso ocorre por design, para evitar que duas instalações manipulem os mesmos arquivos / pastas / chaves do registro / etc .; provavelmente poderia ter sido feito de maneiras diferentes, mas a Microsoft fez essa escolha.


Alguma referência para apoiar sua reivindicação?
Aaron Digulla 27/08/10

1

Você pode chutar vários arquivos MSI para instalar em sequência rápida, um após o outro, usando um arquivo em lotes. Você não pode executar dois arquivos MSI simultaneamente, no sentido de que ambos gravam no disco ao mesmo tempo.

O motivo é que parte de uma instalação MSI é executada como uma "transação" - uma sequência de alterações confirmadas ou revertidas, dependendo se as ações na lista de transações são concluídas sem erro. Todos devem ser concluídos sem erro e, em seguida, a transação é confirmada, caso contrário, ocorre uma reversão completa de todas as alterações. Daqui resulta que apenas uma dessas transações pode estar ativa a qualquer momento.

No nível técnico do MSI, apenas as ações entre as ações padrão InstallInitialize e InstallFinalize no InstallExecuteSequence são executadas como uma transação. Nenhuma alteração do sistema deve ocorrer fora dessas ações, mas às vezes os arquivos MSI são projetados erroneamente para fazer alterações em outras seqüências.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.