Achei que poderia compactar um .exe
arquivo para uso portátil. Mas o Windows diz que não funcionará porque pode depender de outros arquivos na pasta compactada.
O que isto significa? Por que não posso simplesmente executar o programa a partir do arquivo zip? O aplicativo pode usar um caminho relativo em vez de um caminho direto para acessar outros arquivos.
Arquivos executáveis (.exe) podem depender de outros arquivos para execução adequada. Por exemplo, eles podem precisar de uma biblioteca vinculada dinamicamente (.dll) para executar o código externo, um arquivo de texto (.ini, .txt, etc) para configuração ou um arquivo de banco de dados para - bem, dados.
Ao executar um executável de dentro de um arquivo, como um arquivo .zip, esses arquivos podem não ser extraídos e o programa não funcionará conforme o esperado. Como alternativa, o programa pode ser executado e criar esses arquivos em um local diferente. Se você moveu esse arquivo para outro computador, esses arquivos não estarão lá.
Se você tem 100% de certeza de que a execução do programa a partir do arquivo não causará nenhum problema, você pode ignorar a mensagem com segurança.
Embora o Windows moderno faça os arquivos ZIP parecerem pastas, isso é superficial. Um programa não pode fazer algo como
open('c:\foo.zip\bar.txt','rb')
.Portanto, quando você clica duas vezes em um arquivo em um arquivo ZIP, o Windows extrai o arquivo para um diretório temporário e abre o arquivo temporário.
Isso é problemático de várias maneiras. Em primeiro lugar, se o arquivo temporário for modificado, as modificações não encontrarão seu caminho de volta para o arquivo ZIP. IIRC, o Windows atenua isso marcando o arquivo temporário como somente leitura. Em segundo lugar, se o arquivo depender de outros arquivos disponíveis nos locais relativos corretos, eles não serão encontrados.
Muitos executáveis dependem de arquivos de suporte, então a MS adicionou o aviso com uma opção para extrair apenas o arquivo executável ou extrair tudo no arquivo ZIP.
Nenhum dos dois é realmente adequado para muitos "aplicativos portáteis", devido ao problema de que não há como as modificações nos arquivos de dados do programa encontrarem seu caminho de volta para o arquivo ZIP.
Há muitos motivos pelos quais a execução de um .exe a partir de um zip pode causar problemas.
Em primeiro lugar, conforme mencionado, quando você "executa" o arquivo, ele é realmente extraído para um local temporário e, em seguida, executado.
Problemas imediatos significam que todos os arquivos que também podem ter sido compactados com o EXE provavelmente não foram extraídos e, portanto, não podem ser acessados. Isso pode incluir bibliotecas necessárias para executar o .exe, arquivos de configuração e até coisas simples como arquivos de ajuda.
Além disso, mesmo que você tenha compactado tudo "que achou" o arquivo necessário (no arquivo zip), e estes são extraídos de alguma forma, as instalações modernas geralmente incluem coisas como:
Dados adicionados aos arquivos de biblioteca/driver do registro do Windows armazenados em outros locais, pois podem ser compartilhados com outros programas de registro de arquivos de biblioteca/driver
Isso é apenas o básico
Você então tem outros possíveis problemas adicionados, de direitos de acesso/arquivo, estes podem estar faltando e o programa pode ser executado incorretamente como resultado.
Então, mesmo se você colocar o programa em execução, a maioria dos aplicativos modernos requer o salvamento de algum tipo de dado de configuração para uso futuro. Como o aplicativo está em um local temporário, provavelmente será excluído (junto com todos os arquivos que ele criar) e praticamente impossível de ser encontrado novamente (sim, eu sei que não é realmente impossível, mas não é muito gerenciável). E vale a pena notar que qualquer coisa criada pelo aplicativo provavelmente não encontrará o caminho de volta para o zip.
Portanto, a menos que você tenha um aplicativo independente que não exija salvamento de configuração e seja projetado especificamente para ser executado como um aplicativo independente, é melhor não tentar executá-lo a partir de um Zip.
Se você está tentando tornar algo portátil, geralmente é uma opção melhor usar aplicativos projetados para serem executados a partir de um cartão de memória ou unidade virtual.
Espero que isto ajude.