Pergunta

Em um ponto eu tinha um utilitário de compressão pouco agradável que quebrou meu Delphi compilado EXE do que um tamanho de download menor, mas agora não consigo encontrá-lo. Quaisquer recomendações?

Além disso, existem desvantagens de usar esses tipos de serviços públicos? (Eu principalmente usá-los para reduzir o tempo de download para / usuários dial-up rurais).


questão relacionada: Existem desvantagens de usar UPX para compactar um executável do Windows

?
Foi útil?

Solução

Há alguns anos, eu olhei para comprimir o meu executável para fazer o download menor.

O que eu acabei fazendo, e o que eu recomendo para você, é usar um programa de instalação como Inno Setup . Não só criar um único EXE que irá instalar / desinstalar o programa, mas também comprime que EXE praticamente tanto quanto um compressor separado faria para o seu sozinho executável.

Quando o programa é instalado, ele fica descomprimido, por isso nunca parece ser um vírus e não aumenta o tempo de carregamento.

Então eu obter os benefícios do tamanho de download menor, e um script de instalação de aparência profissional ao mesmo tempo.

P.S. Inno Setup é gratuito.

Outras dicas

A recomendação é que você não:

  • compressores EXE pode fazer seu pedido de parecer um vírus (auto-modificando)
  • gzip / zip são tão eficazes na compressão e não mexer com a sua aplicação
  • compressores
  • EXE fazer os tempos de carregamento de seu aumento de aplicativo (a menos que você está falando apenas sobre o programa de instalação que é uma questão diferente

Este louco site à procura traz um argumento que eu tinha ouvido no passado distante (se é verdade ou não, ainda hoje, eu não tenho certeza, embaladores modernos provavelmente tem uma estratégia diferente hoje) Este artigo faz referência Win32! :)

http://topic.csdn.net/t/20000408/08/ 6785.html

sistemas operacionais multitarefa modernas, como Windows 95/98 e NT usar o que é chamado de sistema de "memória virtual". Quando programas começam, todo o seu código é não carregado na memória imediatamente na inicialização, como foi o caso com o DOS programas. Em vez disso, apenas porções de o código que está sendo executado ativamente são armazenados na memória. Por exemplo, digamos o programa tem uma opção de impressão na sua menu e código por trás disso que trata a impressão. Este código só será carregado na memória uma vez que a cópia característica é primeiro seleccionado pelo utilizador. E se após o código é carregado na memória o recurso de impressão não é usado por um tempo o sistema irá "descarte" o código, liberando a memória que ocupada, se outro aplicativo precisa desesperadamente de memória. Isso faz parte de um processo chamado de "paging" e é completamente transparente para o programa.

Outra paginação caminho sob Win32 memória conserva é que provoca múltiplos instâncias de um programa (ou DLL) para compartilhar a mesma memória para o código. No Ou seja, em condições normais circunstâncias, não há verdadeira diferença na quantidade de física memória alocada para código entre a partir de 100 casos de um programa e iniciar uma instância.

Se todos os programas Win32 se comportou como DOS programas, carregamento tudo em memória e mantê-lo lá até que o programa terminou e também não compartilhar qualquer memória entre múltiplas casos, você provavelmente pode imaginar a rapidez com que a memória física poderia correr para fora em sistemas com uma quantidade limitada, causando disco trocando para começar.

No entanto, este é precisamente o atual compressores Win32 EXE fazer para o seu de EXE / DLL! Eles completamente ir contra o sistema de paginação do sistema operacional por descomprimir todo o código na memória e mantê-lo lá até o término. E porque o código não é armazenado em um formato "raw" no arquivo EXE (ou seja, o mesma forma que é armazenada na memória), o OS é incapaz de compartilhar código entre várias instâncias.

Eu não sei de nenhum que são especificamente para Delphi, mas UPX é muito popular para este tipo de coisa. A única desvantagem é que o executável tem de ser descomprimido quando é lançado, e que pode comer algum tempo. Parece ser muito rápido para executáveis ??sanely porte, no entanto.

O que você provavelmente está pensando é ASPack - é um compressor EXE escrito em Delphi, mas irá comprimir qualquer EXE. Pode fazer extras bem no embora de Delphi EXE. Concordo com as outras respostas que você não deve usar um compressor EXE apenas para economizar em tempos de download. Pode haver situações específicas em que uma compressa de EXE é uma boa idéia, mas geralmente não é.

Em vez disso usar um construtor de instalação boa, especialmente se você pode encontrar um que usa 7zip compressão. Eu sei InstallAware usos 7zip internamente para compressão máxima. Dependendo do que as versões do Delphi você possui você pode ter uma licença de InstallAware também.

Se nada mais você pode construir uma auto-extraível arquivo com instalação básica comportamento com 7zip gratuitamente. É um download separado para SFXs para instaladores.

Use UPX com lzma opção para compressão máxima.

upx --lzma yourfile.exe

O principal inconveniente de um EXE comprimido ou DLL é que o sistema operacional não pode compartilhar o código entre várias instâncias.
Então você está memória desperdício, tem que descompactar cada vez que você inicia uma instância, exibir um vírus como o comportamento, mesmo sem uma vantagem download com uma comprimido instalar.
Único caso positivo é quando lançadas directamente a partir de uma unidade de rede.

Eu acredito que servidores de terminal (como Citrix) irá utilizar a mesma memória para você está binário do aplicativo se ele é descompactado. O que significa um exe comprimido podia sentir o cheiro de um pequeno desastre em um ambiente Citrix.

UPX deve funcionar, embora não seja Delphi específico.

Eu também votariam upx. Ao lado das desvantagens que foram mencionados também protege da engenharia reversa de base e os coxos ferramentas "hackers recurso". Que por sinal são muitas, ea maioria deles não conseguem abrir um comprimido executável.

Eu fiz uma pergunta sobre a Con de usar UPX em Delphi executáveis ??aqui no SO um tempo atrás, e eu tenho algumas grandes respostas.

Existem desvantagens para usando UPX para compactar um executável do Windows?

Você pode usar PECompact já que as pessoas não podem decifrá-lo facilmente, e como teste mostrou (mostrou na página principal, basta rolar um pouco para baixo) é melhor do que ASPack ou UPX, eu tenho de usá-lo em meus projetos Delphi anteriores

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top