É possível executar um arquivo após a extração de um arquivo SFX (7-Zip self-extracting archive)?


40

Estou tentando criar um aplicativo implementável compactado.

Atualmente, estou pegando um conjunto de arquivos que publiquei do meu IDE (aplicativo publicado no Visual Studio 2008 - WPF) e os compactando em um arquivo SFX 7-Zip.

Meus usuários perguntaram se podem "instalar um clique" no 7-Zip exe. Existe uma lista de parâmetros quando estou criando o arquivo. Existe uma maneira de definir algum tipo de combinação de parâmetros para chamar o executável do instalador que é extraído?

Infelizmente, a documentação do 7-Zip parece não cobrir esse cenário. Eu já vi vários aplicativos pagos que fazem algo semelhante a isso, mas estou tentando manter a ferramenta que estou escrevendo livre de código licenciado para que possamos usá-lo internamente.


Você poderia apontar para alguém pago?
precisa saber é o seguinte

Respostas:


35

Você precisará fazer o download do SDK do LMZA do 7-Zip . O arquivo "installer.txt" contém a documentação:

7zSD.sfx é um módulo SFX para instaladores. 7zSD.sfx usa msvcrt.dll.

Os módulos SFX para instaladores permitem criar um programa de instalação. Esse módulo extrai o arquivo morto para a pasta temp e, em seguida, executa o programa especificado e remove os arquivos temporários após o término do programa. O arquivo de extração automática para instaladores deve ser criado como junção de três arquivos: SFX_Module, Installer_Config, 7z_Archive. Installer_Config é um arquivo opcional. Você pode usar o seguinte comando para criar o arquivo de extração automática do instalador:

copy /b 7zSD.sfx + config.txt + archive.7z archive.exe

Você precisa criar um arquivo config.txt.

O arquivo de configuração contém comandos para o Instalador. O arquivo começa na string ;!@Install@!UTF-8!e termina com ;!@InstallEnd@!. O arquivo deve ser gravado na codificação UTF-8. O arquivo contém pares de cadeias:

ID_String = "Valor"

Title Título para mensagens

BeginPrompt Iniciar mensagem de prompt

ProgressO valor pode ser "sim" ou "não". O valor padrão é "yes".

RunProgramComando para execução. O valor padrão é "setup.exe". A cadeia de caracteres %% T será substituída pelo caminho para a pasta temporária, onde os arquivos foram extraídos

DirectoryPrefixo do diretório para "RunProgram". O valor padrão é ". \"

ExecuteFile Nome do arquivo para execução

ExecuteParameters Parâmetros para "ExecuteFile"

Por exemplo:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!

11
sim. Eu tentei. Um pouco desconfortável porque tudo é linha de comando, mas você encontrará uma boa documentação para isso. E eu recebo a melhor compactação disponível gratuitamente.
21709 Ganesh R.

@ MikeG - Esse link é muito mais completo. Ele explicou como tornar a parte de descompressão completamente transparente. Muito bom - Obrigado!
namuol

5
Observe que os "módulos SFX foram movidos para o pacote LZMA SDK" (disponível em 7-zip.org ) a partir da versão 9.35 beta.
Lukas

21

A solução acordada está correta, mas na verdade não ajuda a explicar o que você realmente precisa fazer !. Li esta e muitas outras soluções e não consegui encontrar instruções simples completas e completas sobre como fazer isso.

Se você está confuso como eu, leia meu post no blog, que fornece instruções passo a passo sobre como obter o que Molly7244 postou.

Como criar um arquivo de extração automática que executa o setup.exe com a opção 7zip -sfx

Fui informado de que os links podem ficar mortos. Aqui estão as etapas do meu blog

Etapa 1 - Configure sua pasta de instalação

Para facilitar, crie uma pasta c: \ Install. É aqui que copiaremos todos os arquivos necessários.

Etapa 2 - 7 zipar seus instaladores

  1. Vá para a pasta que possui o seu .msi e o seu setup.exe
  2. Selecione o .msi e o setup.exe
  3. Clique com o botão direito e escolha 7Zip -> "Adicionar ao arquivo"
  4. Nomeie seu arquivo "Installer.7z" (ou um nome de sua escolha)
  5. Clique OK
  6. Agora você deve ter o "Installer.7z".
  7. Copie esse arquivo .7z para o diretório c: \ Install

Etapa 3 - Obtenha o módulo de extensão 7z-Extra sfx

Você precisa fazer o download do 7z-Extra.

  1. Siga este link para baixar 7Zip
  2. Você precisa fazer o download da versão 9.20 (como @ maio de 2015), pois a versão beta não contém os arquivos corretos.
  3. Um link para download direto .
  4. Extraia os arquivos extras do 7zip
  5. Copie o arquivo "7zS.sfx" para c: \ Install

Etapa 4 - Configure seu config.txt

Eu recomendaria usar o NotePad ++ para editar este arquivo de texto, pois você precisará codificar em UTF-8. As instruções a seguir estão usando o bloco de notas ++.

  1. Usando o Windows Explorer, vá para c: \ Install
  2. clique com o botão direito do mouse e escolha "Novo arquivo de texto" e nomeie-o como config.txt
  3. clique com o botão direito e escolha "Editar com o NotePad ++
  4. Clique no "Menu de codificação" e escolha "Codificar em UTF-8"
  5. Digite algo como isto:

    ;!@Install@!UTF-8!
    Title="SOFTWARE v1.0.0.0"
    BeginPrompt="Do you want to install SOFTWARE v1.0.0.0?"
    RunProgram="setup.exe"
    ;!@InstallEnd@!
    

Edite isso substituindo [SOFTWARE v1.0.0.0] pelo nome do seu produto. As notas sobre os parâmetros e opções para o arquivo de instalação estão aqui

CheckPoint

Agora você deve ter uma pasta "c: \ Install" com os 3 arquivos a seguir:

  1. Installer.7z
  2. 7zS.sfx
  3. config.txt

Etapa 5 - Criar o arquivo morto

Encontrei essas instruções na Web, mas em nenhum lugar ele explica qualquer uma das 4 etapas acima.

  1. Abra uma janela do cmd, Janela + R -> cmd -> pressione enter
  2. Na janela de comando, digite o seguinte

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Procure em c: \ Install e agora você verá um MyInstaller.exe

  4. Você terminou

Execute o instalador

Clique duas vezes em MyInstaller.exe e a mensagem será exibida. Clique em OK e o setup.exe será executado.

Nota PS sobre automação

Agora que você tem isso funcionando no diretório c: \ Install, eu criaria um arquivo "Install.bat" e colocaria o script de cópia nele.

copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe

Agora você pode editar e executar o Install.bat toda vez que precisar recriar uma nova versão do seu pacote de implantação.


2
Esta deve ser a resposta aceita!
Noelicus 06/04

É possível passar uma linha de comando arg para o ExecuteParametersitem config.txt? Por exemplo: C:\Install\MyInstaller.exe some_file.txt seria executado setup.exe some_file.txt.
Dthor 10/05

Sim. Como Matthew-Lundberg disse em sua resposta , "Argumentos passados para o executável SFX são repassados para o script install.cmd"
dthor

8

Você também deve olhar para o NSIS . Com ele, você pode criar um instalador que é compactado com o mesmo método que o 7-Zip usa ( LZMA ), portanto deve ter aproximadamente o mesmo tamanho e ter controle total sobre o processo de instalação.


2

Com base na resposta de jcrawfor74, aqui estão algumas informações adicionais:

Em vez de 7zS.sfx , você também pode usar o arquivo 7zS2.sfx . Esta é uma versão muito menor (28 kB vs. 140 kB), mas não suporta o arquivo config.txt. Então você pode simplesmente deixar de fora no comando copy. Se você deseja apenas criar pequenos scripts de configuração, isso permite criar arquivos EXE menores.

O módulo SFX menor não faz nenhuma pergunta. Ele extrai os arquivos para uma pasta temporária como o outro módulo e localiza candidatos executáveis. De acordo com o código-fonte (também disponível na página de downloads), em C \ Util \ SfxSetup \ SfxSetup.c, ele pesa os arquivos de maneira diferente com base em seu nome e extensão e, em seguida, escolhe o arquivo com a pontuação mais alta.

Os dois módulos SFX são executados automaticamente como administrador , pelo menos no Windows 10, e isso não pode ser configurado. Embora esse comportamento possa ser desejável para configurações em todo o sistema, nem sempre esse é o caso. Além disso, essa decisão é baseada apenas nos dados da versão do arquivo, pois não há nenhum manifesto incluído que diga explicitamente ao Windows o que fazer. A compatibilidade do Windows examina o arquivo e localiza seqüências como "Instalação" que levam ao prompt de elevação.

Se você precisar de um módulo SFX que não solicite permissões de administrador, poderá reconstruir o módulo SFX a partir da fonte ou, mais simples, editar as informações da versão do arquivo com um editor de recursos como este . Apenas remova a palavra "Setup" do campo FileDescription, no caso do Resource Hacker mencionado, compile o arquivo e salve o arquivo EXE. Você também pode executar esta etapa no arquivo 7zS.sfx ou 7zS2.sfx diretamente e mantê-lo em algum lugar para poder usá-lo para criar pacotes SFX não elevados. E você pode usá-lo para personalizar totalmente as informações da versão do arquivo para colocar o nome do produto ou qualquer outra coisa que descreva a carga útil.

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.