Diferença entre um arquivo executável autônomo e um executável instalado?

17

Percebi no Windows, pelo menos, que você pode baixar um arquivo executável direto vinculado estaticamente e iniciá-lo diretamente, ou gravar seu próprio programa e executá-lo (mesmo dinamicamente) sem precisar instalá-lo.

Isso me leva ao meu ponto principal ... qual é o objetivo do processo de instalação? Quero dizer, além de talvez o Registro do Windows . No entanto, para fins de praticidade e uso, é possível ter um programa único, independente e independente que possa ser executado, armazenado em armazenamento não volátil e acessado através do sistema de arquivos de qualquer dispositivo em que esteja ligado e executado no sistema operacional. Então, qual é o grande problema de tudo isso "instalar este" negócio, se muitos programas excelentes de praticamente qualquer magnitude podem funcionar perfeitamente sem passar por uma configuração de instalação? Isso me intriga um pouco e, além de um banco de dados ou outros sistemas de configuração de metadados / acesso, qual é a diferença real aqui se o último (um executável instalado) executa e funciona da mesma maneira que um autônomo?

Existe alguma diferença aqui que eu não conheço com um programa não instalado versus um programa instalado?

PS: Isso não precisa se aplicar apenas aos sistemas operacionais Windows, mas àqueles que implementam uma função semelhante.

ᔕᖺᘎᕊ
fonte

Respostas:

16

Há várias razões pelas quais os programas vêm como instaladores e não como executáveis ​​independentes:

Preocupações com o tamanho do arquivo

  • Programas com muitas dependências grandes podem agrupar instaladores baseados na Web que baixam as dependências e as colocam em um local comum, para que possam ser compartilhadas por vários programas. Por exemplo, o DirectX é uma biblioteca muito grande. Se todos os programas em seu sistema que dependem do DirectX agrupassem todo o tempo de execução do DirectX, ele consumiria um bom espaço. Isso pode não parecer importante nos discos rígidos de 4 TB, mas considere que os SSDs são bem menores em capacidade e estão sendo usados ​​em ultrabooks, alguns com apenas 64 GB de armazenamento. E, claro, existem muitas outras bibliotecas compartilhadas além do DirectX.

  • Os programas que são muito grandes e atualizados continuamente são melhor distribuídos como uma coleção de muitos arquivos pequenos, juntamente com um programa iniciador ou atualizador que verifica se há uma atualização na Internet e, se houver alguma atualização, faça o download apenas das alterações necessárias. Se todos os programas grandes forem enviados como um único executável monolítico, é muito provável que o processo de correção exija o download de todo o executável, pois a correção do arquivo executável em execução no disco é quase impossível devido a bloqueios de arquivo. Além disso, como o atualizador precisa saber onde estão seus arquivos, ele geralmente armazena esse caminho de diretório em um local conhecido no registro.

Preocupações com a conveniência do usuário

  • Os instaladores de programas muito grandes, como o Visual Studio e o Microsoft Office, permitem ao usuário desmarcar a instalação de determinados recursos, se o usuário souber que nunca precisará deles. Isso tem três benefícios em potencial: reduz o consumo de espaço em disco; pode reduzir o tempo de download e o consumo de largura de banda se o instalador for um download da web; e pode reduzir a "desorganização" e o "inchaço" na máquina do usuário, menos atalhos no menu Iniciar / área de trabalho, menos programas de inicialização etc.

  • Os instaladores de programas complicados geralmente vêm com opções de configuração que o usuário pode configurar usando uma interface gráfica amigável como parte do instalador. Veja, por exemplo, os instaladores do MySQL ou SQL Server, que podem orientá-lo durante todo o processo de instalação e execução do servidor de banco de dados antes mesmo de você clicar em "Concluir" no instalador.

  • Os instaladores podem solicitar ao usuário as informações necessárias, como chaves de licença, que precisam ser inseridas apenas uma vez. Isso pode simplificar o design do próprio programa, reduzir o número de coisas que ele precisa fazer e verificar quando é iniciado. Isso também resulta na confiança do usuário em que, uma vez que o programa seja instalado com sucesso, ele deve "apenas funcionar" - não haverá mais "truques" no programa que possam impedi-lo de usá-lo.

Preocupações de compatibilidade

  • Alguns programas entram em conflito com outros. Esse é um fato simples e infeliz da engenharia de software. Antes de instalar um programa que possui conflitos com outros programas, geralmente é útil verificar primeiro o sistema para verificar se um programa incompatível está instalado. O usuário pode ser alertado, se houver. Por exemplo, existe um potencial de incompatibilidade muito perigoso nas versões mais antigas do VMware e VirtualBox, que resultaram em uma tela azul da morte, porque um programa tentaria usar uma instrução especial do processador de virtualização depois de já estar reservada para o usuário pelo outro produto . Se você simplesmente fornecesse o produto final ao usuário sem um instalador, teria que verificar a presença de produtos incompatíveis a cada início do seu programa, o que pode atrasar a inicialização do programa.

  • Os programas podem ter dependências de outros componentes do sistema que podem ser instalados apenas em todo o sistema, e não por usuário. Para instalar esses componentes especiais do sistema, geralmente são necessários privilégios administrativos e geralmente é necessário executar um instalador.

Privilégios elevados e serviços especiais

  • Alguns programas dependem de alterações no sistema operacional para sua funcionalidade, e essas alterações não podem ser implementadas facilmente sem algum tipo de instalador para cuidar deles com privilégios administrativos. Por exemplo, programas que instalam drivers ou módulos de kernel, como o Wireshark, não podem simplesmenteser executado, porque você absolutamente precisa enviar os componentes do modo kernel em arquivos separados. Na melhor das hipóteses, você ainda precisará descompactar manualmente um arquivo morto e executar algum tipo de instalador para o driver do dispositivo. Os serviços são outro exemplo de algo que requer privilégios administrativos para instalar. O software instalador é particularmente bom em obter direitos de administrador de maneira elegante, sem exigir que o próprio programa principal solicite direitos de administrador toda vez que for executado (isso seria uma exposição desnecessária à segurança em muitos casos).

Tendo apresentado todas estas razões pelas quais os instaladores são úteis, aqui estão algumas observações do outro lado:

  • Muitos programas, mesmo aqueles que estão disponíveis apenas para download como um instalador que requer privilégios de administrador, podem ser "desempacotados" à força de seus instaladores e executados diretamente sem a instalação. Outros programas, especialmente os de código aberto, são reembalados em executáveis ​​independentes pelo PortableApps . Vale ressaltar que alguns programas, quando descompactados do instalador, terão funcionalidade reduzida, exibem erros ou outros problemas.

  • Em sistemas operacionais diferentes do Windows, quase sempre é possível simplesmente baixar (ou compilar) programas e executá-los como um usuário comum, sem obter raiz. Existem algumas exceções em relação aos pacotes que são uma parte essencial do sistema operacional, mas para a maioria dos aplicativos de usuário, você pode executá-lo em seu diretório pessoal sem instalá-lo em todo o sistema usando o gerenciador de pacotes. O Windows é um caso um pouco especial, pois a maioria dos programas da área de trabalho no Windows possui um instalador e geralmente não pode ser instalado de outra maneira.

  • Mesmo em plataformas não Windows, os programas que precisam carregar um módulo do kernel vêm com algum tipo de instalador, que compila o módulo do kernel e o instala no diretório correto. Você também pode esperar ver um instalador caso o programa seja um daemon que será iniciado usando um script de serviço do sistema, por exemplo, em /etc/init.d. Esse tipo de "binário encolhido" é um método de distribuição menos comum no GNU / Linux, mas a maioria das distribuições Linux ainda fornece a maioria dos softwares na forma de pacotes instaláveis, cada um dos quais requer acesso root (acesso de administrador) para instalar.


Conclusões

Você perguntou por que precisamos de instaladores. A resposta curta é que não - não estritamente falando, de qualquer maneira. Existem pouquíssimos exemplos de aplicativos que não podem , em princípio, ser agrupados em um único executável independente, sem recursos, sem instalador, etc. para um arquivo em disco, instale-o dinamicamente na inicialização do programa e envie todos os seus recursos (imagens, sons etc.) agrupados na seção de dados do executável.

Usar ou não um instalador é uma escolha que os produtores de software precisam fazer. Existem vantagens e desvantagens em usar um instalador. Muitos vendedores optar por distribuir seu software tanto como um instalador, e como um binário autônomo, ou pelo menos como um arquivo ZIP que pode simplesmente ser desembalado e correr. Para softwares que não exigem absolutamente um instalador, esse é um caminho muito pragmático e deixa todos felizes. Geralmente, o software que não é fornecido de nenhuma outra forma além de um instalador é um software que requer privilégios administrativos para instalar algum componente de si mesmo, já que o instalador é a maneira mais elegante de obter os privilégios necessários.

Pessoalmente, acho os instaladores muito irritantes no meu dia-a-dia, porque às vezes quero executar um programa quando não tenho direitos administrativos no computador que estou usando. Eu tenho bastante experiência em descompactar manualmente os instaladores para extrair os arquivos de programa e fazer com que esses arquivos sejam executados corretamente. No entanto, no meu PC pessoal em casa, onde sempre tenho acesso administrativo, considero os instaladores benéficos e convenientes, porque a maioria dos instaladores me oferece opções úteis, como criar um atalho na área de trabalho, que eu teria que fazer manualmente sem ele.

allquixotic
fonte
Ótima resposta, mas sua abertura com o DirectX e o tempo de execução não faz sentido. Primeiro, apenas a tempo de execução do DirectX está dentro da linguagem está escrito em si, que é C.
@TomTurkey Um ... what? Por que importa em que idioma está escrito? Claro, você pode vincular estaticamente qualquer componente do DirectX necessário ao seu executável, mas, como eu disse, isso apresenta um problema de tamanho de arquivo se muitos programas começarem a fazer isso com grandes bibliotecas (o Qt 4.x, por exemplo, executa cerca de 40 MB ) O código precisa estar em algum lugar, e você não pode simplesmente assumir que a versão do DirectX necessária já está instalada no sistema, ou você receberá um erro quando alguém abrir o programa no Windows XP SP2 que não foi corrigido idades.
allquixotic
4
Ah, acho que você me entendeu mal - na minha resposta, eu não estava falando sobre a instalação do DirectX ; Eu estava falando sobre a instalação de um programa que depende do DirectX. Para satisfazer essa dependência, você pode compilar o DirectX diretamente no seu aplicativo, aumentando assim o consumo desperdiçado de espaço em disco, ou pode empacotar um pequeno aplicativo no instalador que verifica se você possui os tempos de execução do DirectX apropriados instalados e, se não, faz o download deles e coloca-os em um local centralizado do sistema. O último é muito mais eficiente em termos de espaço em disco e tamanho do download.
allquixotic
3
@allquixotic Além disso, licenciamento. Às vezes, uma biblioteca pode não estar licenciada para redistribuição independentemente de seu instalador. O DirectX pode se enquadrar na categoria, não tenho certeza. A estrutura .NET sim, eu acho. Não é uma restrição técnica, mas legal. (O .NET framework tem restrições técnicas adicionais, mas é muito bem integrado no OS..)
Bob
1
boop . O som de um comentário votado. Na minha cabeça.
precisa saber é o seguinte
3

O processo de instalação considera estes itens:

  1. se você exigiu a biblioteca (api) instalada, como a versão do framework .net ou o X direto.

  2. Instale alguns arquivos DLL adicionais do sistema na pasta do sistema. Se a pasta do sistema já contiver esses arquivos (mesma versão), ignore esta etapa. Dessa forma, você não precisa de várias cópias dos mesmos arquivos DLL.

  3. Instale atalhos no menu Iniciar ou na área de trabalho para ajudá-lo a iniciar o aplicativo rapidamente.

  4. Como você disse, modificação do Registro. Esta etapa pode realmente ser executada quando o aplicativo é executado pela primeira vez neste computador, portanto não é muito importante.

  5. muito importante: agrupar um software (como a barra da área de trabalho do Google ou a barra do Yahoo! no IE). É assim que muitos softwares independentes criam receita para o desenvolvedor. Não se esqueça disso, se você estiver usando software livre.

Como estamos considerando um aplicativo "executável", não precisamos discutir as etapas que podem instalar um complemento do IE ou coisas relacionadas.

Ben Lin
fonte
3

O programa autônomo não possui dependências externas.

Ele não precisa ser apenas o arquivo .exe, pode ter as bibliotecas e arquivos de dados que acompanham: Descompacte o arquivo morto em uma pasta e execute o executável. Se você apenas descompactar um arquivo morto, nenhum atalho será adicionado ao menu Iniciar; portanto, você terá que navegar para a pasta onde o aplicativo descompactado está localizado e iniciá-lo a partir daí, ou criar manualmente um atalho para ele no menu Iniciar. Muitos usuários de computador acham difícil.

Mais Fácil de Usar

Um instalador orienta os usuários no processo de instalação. Você faz o download do instalador, .exe ou .msi (o primeiro é preferível para usuários não avançados) e o executa. Ele pega a pasta de instalação, geralmente Program Filescopia os arquivos, cria um atalho no menu Iniciar. Você terminou: na maioria dos casos, basta clicar em Avançar várias vezes.

Em seguida, vá ao menu Iniciar e execute o aplicativo. Alguns instaladores fornecem uma opção para iniciar o aplicativo quando a instalação estiver concluída.

Se o aplicativo abrir arquivos ou documentos de determinado tipo, o instalador o registrará no shell. Para que você possa clicar no arquivo para abri-lo.

Contrato de Licença

Muitos aplicativos, comerciais e gratuitos, exigem que você aceite o contrato de licença antes de poder usar o aplicativo. A instalação não continua até que você reconheça que concorda com os termos da licença. Mesmo se você não leu a licença, você concordou.

Dependências

Às vezes, não basta copiar os arquivos executáveis. Os aplicativos geralmente usam componentes compartilhados ou bibliotecas de tempo de execução especiais. Por exemplo, o .Net framework runtime precisa estar instalado para executar o aplicativo gravado para .Net; mesmo o tempo de execução do Visual C ++, se não estiver vinculado estaticamente, deve ser instalado. O instalador se encarrega de garantir que todas as dependências sejam atendidas.

Se um aplicativo consistir em vários arquivos .exe e / ou .dll, a vinculação dinâmica ao tempo de execução do Visual C ++ reduz o espaço em disco. Se .exe e .dll estiverem estaticamente vinculados, o tempo de execução será duplicado em cada arquivo.

Os termos de licença de uma biblioteca podem não permitir vinculação estática.

Segurança

Se uma vulnerabilidade for encontrada no tempo de execução, ela poderá ser atualizada separadamente do aplicativo. As atualizações para o tempo de execução .Net e Visual C ++ são instaladas automaticamente via Windows Update.

Se executáveis ​​e bibliotecas estiverem vinculados estaticamente, o fornecedor do aplicativo precisará recompilar o aplicativo e liberar a versão atualizada. Portanto, o uso do tempo de execução compartilhado reduz o custo de manutenção de aplicativos para desenvolvedores e fornecedores.

A instalação Program Filestambém fornece um ambiente mais seguro: os arquivos não podem ser modificados ou excluídos sem privilégios de administrador.

Registro

Muitos aplicativos do Windows contam com entradas no registro. Se o aplicativo usar COM, todos os objetos deverão ser registrados, caso contrário, o aplicativo falhará ao criar o objeto necessário e não será iniciado.

Alexey Ivanov
fonte
1
+1 para atualizações de segurança de componentes compartilhados - não pensei em escrever isso na minha resposta.
allquixotic
0

Resposta breve: um exe independente não requer a instalação de bibliotecas no computador e não requer entradas do Registro ou outros componentes.

Um arquivo instalado pode ser autônomo em um pacote de instalação, mas geralmente depende de uma variedade de componentes e bibliotecas instalados ao lado dele.

Em muitos casos, através do Universal Extractor (atualização não oficial: aqui ), você pode extrair o conteúdo de um instalador e executar um programa sem privilégios administrativos no Windows. Os instaladores do MSI podem ser descompactados com lessmsi .

Na maioria dos outros sistemas operacionais, todos os programas podem ser executados sem privilégios de administrador / raiz, por meio de 'bin', 'lib' e outros diretórios específicos do usuário no diretório inicial. Pessoalmente, detesto instaladores a maior parte do tempo, porque eles dificultam o uso de programas sem privilégios administrativos quando não os tenho. Mas eles são empacotados dessa maneira por grandes empresas para simplificar o processo para o usuário final médio.

Wyatt8740
fonte