mirror of
https://github.com/ip7z/7zip.git
synced 2026-04-21 06:03:40 +00:00
v2026.3.22.0
This commit is contained in:
parent
1eca44e7a7
commit
94a386e0f4
2 changed files with 2 additions and 689 deletions
2
README.md
Normal file
2
README.md
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# 7-Zip on GitHub
|
||||
7-Zip website: [7-zip.org](https://7-zip.org)
|
||||
689
RELEASE.md
689
RELEASE.md
|
|
@ -1,689 +0,0 @@
|
|||
# Release Notes: 7-Zip Fork
|
||||
|
||||
**Version / Versão:** 2026.3.19.0
|
||||
**Author / Autor:** Fernando Nillsson Cidade
|
||||
|
||||
## Languages
|
||||
|
||||
- [Português](#português)
|
||||
- [English](#english)
|
||||
|
||||
---
|
||||
|
||||
## Português
|
||||
|
||||
# Notas de Lançamento: 7-Zip Fork
|
||||
|
||||
**Versão:** 2026.3.19.0
|
||||
**Autor:** Fernando Nillsson Cidade
|
||||
|
||||
## Resumo técnico da release
|
||||
|
||||
Esta release consolida alterações estruturais e funcionais relevantes sobre a base do 7-Zip, com foco principal na expansão do fluxo de compressão pela GUI, customização institucional do fork, reorganização do pipeline de build, sincronização local dos idiomas, geração local do instalador e fortalecimento do ciclo de desinstalação.
|
||||
|
||||
Do ponto de vista arquitetural, a versão `2026.3.19.0` altera diretamente estes subsistemas:
|
||||
|
||||
- interface de compressão da GUI
|
||||
- backend de roteamento de operações de atualização e compressão
|
||||
- diálogo `Sobre o 7-Zip`
|
||||
- mecanismo de localização e sincronização de idiomas
|
||||
- pipeline de build do File Manager e do instalador
|
||||
- instalador e metadados persistidos no Windows
|
||||
- desinstalador e limpeza de DLLs e artefatos temporários
|
||||
|
||||
## Escopo da release
|
||||
|
||||
### Componentes impactados
|
||||
|
||||
- `CPP/7zip/UI/GUI/CompressDialog.cpp`
|
||||
- `CPP/7zip/UI/GUI/CompressDialog.h`
|
||||
- `CPP/7zip/UI/GUI/CompressDialog.rc`
|
||||
- `CPP/7zip/UI/GUI/CompressDialogRes.h`
|
||||
- `CPP/7zip/UI/GUI/UpdateGUI.cpp`
|
||||
- `CPP/7zip/UI/Common/Update.h`
|
||||
- `CPP/7zip/UI/FileManager/AboutDialog.cpp`
|
||||
- `CPP/7zip/UI/FileManager/AboutDialog.rc`
|
||||
- `CPP/7zip/UI/FileManager/AboutDialogRes.h`
|
||||
- `CPP/7zip/UI/FileManager/LangUtils.cpp`
|
||||
- `C/Util/7zipInstall/7zipInstall.c`
|
||||
- `C/Util/7zipUninstall/7zipUninstall.c`
|
||||
- `CPP/7zip/Bundles/Fm/makefile`
|
||||
- `CPP/7zip/UI/GUI/makefile`
|
||||
- `CPP/Build.mak`
|
||||
- `.vscode/7zip-installer-task.ps1`
|
||||
- `Lang/*`
|
||||
- `InstallerAssets/*`
|
||||
|
||||
## Alterações funcionais consolidadas
|
||||
|
||||
### 1. Expansão da janela `Adicionar ao arquivo compactado`
|
||||
|
||||
O fluxo de compressão da GUI foi ampliado para permitir cenários multi-item e multi-destino dentro do mesmo diálogo, sem exigir uma etapa externa de mapeamento manual.
|
||||
|
||||
#### 1.1 Grupos independentes por item selecionado
|
||||
|
||||
Quando múltiplos arquivos ou diretórios são selecionados na GUI principal e o usuário aciona `Adicionar`, o diálogo passa a construir um grupo lógico por item selecionado. Cada grupo mantém isolamento de estado e de widgets, incluindo:
|
||||
|
||||
- identificação visual do item de origem
|
||||
- controle individual da quantidade de saídas
|
||||
- campos independentes de caminho de saída
|
||||
- persistência local do nome base do item selecionado
|
||||
|
||||
Essa alteração substitui a lógica anterior, que operava sobre uma única coleção agregada, por um modelo de grupos independentes associados diretamente ao item de origem.
|
||||
|
||||
#### 1.2 Múltiplas saídas por grupo
|
||||
|
||||
Cada grupo suporta até 5 saídas de empacotamento. Para isso, a camada de recursos e a camada de diálogo foram alteradas para instanciar múltiplos campos `Arquivo` e múltiplos botões `...`, mantendo sincronização entre estado visual e estado interno.
|
||||
|
||||
Comportamento consolidado:
|
||||
|
||||
- a primeira saída do grupo é inicializada com o caminho padrão sugerido
|
||||
- as saídas adicionais permanecem vazias até ação explícita do usuário
|
||||
- mudanças em `Quantidade` redimensionam o conjunto efetivamente ativo de saídas
|
||||
- a navegação por `...` atua sobre a linha correta do grupo correspondente
|
||||
|
||||
Essa alteração elimina o comportamento anterior em que saídas adicionais herdavam indevidamente o mesmo caminho inicial do primeiro item.
|
||||
|
||||
#### 1.3 Layout dinâmico em runtime
|
||||
|
||||
O diálogo deixa de trabalhar com uma reserva fixa de espaço para cinco saídas sempre visíveis. A janela agora ajusta a disposição vertical dos controles conforme:
|
||||
|
||||
- número de grupos carregados
|
||||
- quantidade de saídas habilitadas em cada grupo
|
||||
- necessidade de exibir ou ocultar linhas extras
|
||||
|
||||
Na prática, houve reestruturação do cálculo de posicionamento, da altura do diálogo e da visibilidade dos widgets associados a cada linha de saída.
|
||||
|
||||
#### 1.4 Correções de geração de nome e extensão
|
||||
|
||||
O fluxo de composição do nome do arquivo compactado foi corrigido para resolver inconsistências de normalização de extensão, especialmente em cenários com nomes já terminados no sufixo do formato corrente.
|
||||
|
||||
Problemas corrigidos:
|
||||
|
||||
- `Download.7z.7z`
|
||||
- `.7z..7z`
|
||||
- nomes vazios derivados de diretórios com barra final
|
||||
- reaplicação indevida de extensão quando o formato era alterado
|
||||
|
||||
Também foi ajustada a lógica de atualização dos caminhos extras para que linhas vazias não passem a receber extensões automaticamente.
|
||||
|
||||
### 2. Ajustes no backend de compressão
|
||||
|
||||
O backend que prepara e dispara as operações de compressão foi expandido para receber o novo modelo de saídas por grupo e por item.
|
||||
|
||||
#### 2.1 Propagação de estado entre GUI e camada de atualização
|
||||
|
||||
O conjunto de opções transportado entre o diálogo e o backend foi estendido para suportar:
|
||||
|
||||
- múltiplos caminhos por grupo
|
||||
- associação entre item selecionado e saídas correspondentes
|
||||
- preservação do comportamento legado quando a operação continua sendo simples
|
||||
|
||||
Os principais pontos de integração dessa consolidação foram:
|
||||
|
||||
- `CPP/7zip/UI/GUI/UpdateGUI.cpp`
|
||||
- `CPP/7zip/UI/Common/Update.h`
|
||||
|
||||
#### 2.2 Correção de reaplicação indevida de extensão
|
||||
|
||||
O fluxo do File Manager que originalmente entrava com modo de nome automático passou a respeitar corretamente caminhos já explicitados na GUI, evitando dupla reaplicação de extensão em operações confirmadas pelo usuário.
|
||||
|
||||
### 3. Customização da janela `Sobre o 7-Zip`
|
||||
|
||||
O diálogo `Sobre o 7-Zip` foi expandido para preservar o bloco institucional original do projeto e adicionar um bloco institucional do fork, com identidade própria do mantenedor.
|
||||
|
||||
#### 3.1 Conteúdo adicional incorporado
|
||||
|
||||
O diálogo agora incorpora:
|
||||
|
||||
- observação de que a build refere-se a um fork
|
||||
- identificação da versão do fork
|
||||
- data de referência do fork
|
||||
- copyright específico do autor
|
||||
- link para o repositório do fork
|
||||
- manutenção da linha informando que o 7-Zip é software grátis
|
||||
|
||||
#### 3.2 Integração com recursos e runtime
|
||||
|
||||
As alterações envolveram:
|
||||
|
||||
- aumento e reorganização do layout do recurso `.rc`
|
||||
- novos controles dedicados no diálogo
|
||||
- resolução de textos por idioma
|
||||
- fallback seguro para strings padrão quando necessário
|
||||
- tratamento do link do repositório como ação clicável
|
||||
|
||||
### 4. Sistema de idiomas e localização
|
||||
|
||||
O fork consolida `Lang/` na raiz do repositório como a fonte principal de verdade dos arquivos de idioma utilizados na GUI, no File Manager local e no stage do instalador.
|
||||
|
||||
#### 4.1 Novas entradas de idioma
|
||||
|
||||
Foram incorporadas novas chaves e novos blocos de tradução para suportar:
|
||||
|
||||
- o rótulo `Quantidade`
|
||||
- o conteúdo expandido da janela `Sobre`
|
||||
- a linha de repositório do fork
|
||||
|
||||
Na prática, o rótulo `Quantidade` foi associado ao ID `4021`, enquanto o bloco `2900` passou a acomodar a expansão das informações exibidas no diálogo `Sobre`.
|
||||
|
||||
#### 4.2 Normalização dos arquivos de idioma
|
||||
|
||||
Foi implementado um fluxo de normalização para evitar que a aba `Language` da GUI acuse erros como `Error in Lang file`.
|
||||
|
||||
Os principais cuidados adotados foram:
|
||||
|
||||
- inserção ordenada dos IDs
|
||||
- remoção de duplicidades inválidas
|
||||
- preservação da estrutura esperada pelo parser do 7-Zip
|
||||
- sincronização automática entre raiz `Lang/` e diretórios de runtime
|
||||
|
||||
#### 4.3 Cobertura ampliada de idiomas
|
||||
|
||||
Os idiomas presentes no projeto passaram a receber suporte para os novos elementos da janela `Sobre` e para o rótulo `Quantidade`, com sincronização para:
|
||||
|
||||
- `CPP/7zip/UI/FileManager/x64/Lang`
|
||||
- `CPP/7zip/Bundles/Fm/x64/Lang`
|
||||
- `dist/installer-full/stage/Lang`
|
||||
|
||||
### 5. Reorganização do pipeline de build e do instalador
|
||||
|
||||
O pipeline do instalador foi redesenhado para deixar de depender do download do instalador oficial como base de montagem.
|
||||
|
||||
#### 5.1 Substituição do modelo baseado em download
|
||||
|
||||
Antes, o fluxo de empacotamento dependia de:
|
||||
|
||||
- download do instalador oficial
|
||||
- extração de payload externo
|
||||
- sobreposição posterior de binários locais
|
||||
|
||||
Agora, o `stage` do instalador passa a ser montado localmente a partir de:
|
||||
|
||||
- binários compilados no workspace
|
||||
- ativos estáticos versionados no repositório
|
||||
- base local de idiomas
|
||||
- documentação local do projeto
|
||||
|
||||
#### 5.2 Introdução de ativos locais do instalador
|
||||
|
||||
Os arquivos antes obtidos da extração do instalador oficial foram movidos para o repositório, com uso direto a partir de:
|
||||
|
||||
- `InstallerAssets/7-zip.chm`
|
||||
- `InstallerAssets/History.txt`
|
||||
- `InstallerAssets/descript.ion`
|
||||
|
||||
#### 5.3 Saída final renomeada do instalador
|
||||
|
||||
O artefato final gerado por este fork passa a ser:
|
||||
|
||||
- `dist/7z2026.3.19.0-x64.exe`
|
||||
|
||||
Isso substitui o nome padronizado anterior derivado da versão upstream.
|
||||
|
||||
### 6. Personalização do instalador e do Painel de Controle
|
||||
|
||||
O instalador foi ajustado para registrar metadados próprios do fork no Windows.
|
||||
|
||||
#### 6.1 Metadados de registro alterados
|
||||
|
||||
Ao instalar o produto, a chave de desinstalação passa a gravar:
|
||||
|
||||
- `DisplayName = 7-Zip 2026.3.19.0 (x64)`
|
||||
- `DisplayVersion = 2026.3.19.0`
|
||||
- `Publisher = Fernando Nillsson Cidade`
|
||||
|
||||
Esses dados são persistidos na entrada:
|
||||
|
||||
- `Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\7-Zip`
|
||||
|
||||
#### 6.2 Coerência entre binário, instalador e identidade visual
|
||||
|
||||
A release alinha:
|
||||
|
||||
- nome do instalador
|
||||
- versão apresentada ao usuário
|
||||
- identidade do fork na janela `Sobre`
|
||||
- metadados exibidos pelo Painel de Controle
|
||||
|
||||
### 7. Fortalecimento do desinstalador
|
||||
|
||||
O subsistema de remoção foi endurecido para reduzir sobras pós-desinstalação e para evitar comportamento agressivo sobre o Windows Explorer.
|
||||
|
||||
#### 7.1 Limpeza explícita de arquivos temporários
|
||||
|
||||
O desinstalador passou a tratar de forma explícita sobras como:
|
||||
|
||||
- `7-zip.dll.tmp`
|
||||
- variantes temporárias correlatas
|
||||
|
||||
#### 7.2 Elevação administrativa e remoção mais segura
|
||||
|
||||
O fluxo agora tenta operar com privilégios apropriados quando necessário, evitando falhas silenciosas na remoção de arquivos instalados em diretórios protegidos do sistema.
|
||||
|
||||
#### 7.3 Correção da estratégia de remoção de DLLs em uso
|
||||
|
||||
Uma solução intermediária baseada em encerramento amplo de processos do Explorer mostrou-se intrusiva, pois podia fechar janelas do Explorador de Arquivos e afetar temporariamente a barra de tarefas. A implementação consolidada substitui esse comportamento por uma estratégia menos agressiva de descarregamento da shell extension, preservando o ambiente do usuário.
|
||||
|
||||
Resultado esperado:
|
||||
|
||||
- menos sobras de DLLs
|
||||
- menor necessidade de reinicialização
|
||||
- ausência do efeito colateral de fechar globalmente o Explorer
|
||||
|
||||
### 8. Robustez de build incremental
|
||||
|
||||
Foram incluídas correções de dependência para evitar composições inválidas entre objetos antigos e cabeçalhos novos, bem como para garantir a regeneração de recursos quando arquivos `.rc` são alterados.
|
||||
|
||||
#### 8.1 Ajustes aplicados
|
||||
|
||||
- dependências explícitas para módulos que consomem `CompressDialog.h`
|
||||
- dependências explícitas para módulos que consomem `Update.h`
|
||||
- dependências explícitas de `AboutDialog.rc` e `AboutDialogRes.h` para regeneração de `resource.res`
|
||||
- sincronização automática das bases locais de idioma usadas pelos binários de teste
|
||||
|
||||
#### 8.2 Benefícios práticos
|
||||
|
||||
Essas alterações reduzem falhas como:
|
||||
|
||||
- fechamento inesperado do `7zFM.exe` após mudança estrutural de diálogo
|
||||
- binários relincados com recursos antigos
|
||||
- runtime carregando idiomas desatualizados
|
||||
|
||||
## Impacto técnico por subsistema
|
||||
|
||||
### GUI de compressão
|
||||
|
||||
- novo modelo de grupos por item
|
||||
- novo modelo de múltiplas saídas por grupo
|
||||
- layout recalculado em runtime
|
||||
- correção de normalização de nomes e extensões
|
||||
|
||||
### Backend de update e compressão
|
||||
|
||||
- expansão da estrutura de opções
|
||||
- repasse correto dos caminhos configurados pela GUI
|
||||
- preservação de compatibilidade com fluxo simples
|
||||
|
||||
### Recursos e localização
|
||||
|
||||
- expansão de recursos `.rc`
|
||||
- adição de novos IDs
|
||||
- sincronização de idioma raiz para runtime
|
||||
- normalização automática dos arquivos de tradução
|
||||
|
||||
### Instalador
|
||||
|
||||
- geração local do `stage`
|
||||
- uso de ativos versionados no próprio repositório
|
||||
- nome final do instalador alinhado à identidade do fork
|
||||
- metadados do produto customizados no Windows
|
||||
|
||||
### Desinstalador
|
||||
|
||||
- limpeza reforçada de arquivos temporários
|
||||
- remoção mais segura de DLLs
|
||||
- comportamento menos intrusivo sobre shell e Explorer
|
||||
|
||||
## Artefatos relevantes desta release
|
||||
|
||||
- `CPP/7zip/UI/FileManager/x64/7zFM.exe`
|
||||
- `CPP/7zip/Bundles/Fm/x64/7zFM.exe`
|
||||
- `dist/7z2026.3.19.0-x64.exe`
|
||||
- `Lang/*`
|
||||
- `InstallerAssets/*`
|
||||
|
||||
## Compatibilidade e observações operacionais
|
||||
|
||||
- a base upstream do 7-Zip foi preservada, com extensões direcionadas principalmente ao File Manager e ao pipeline local de build e instalação
|
||||
- a nova lógica de compressão afeta principalmente o fluxo acionado pela GUI `Adicionar ao arquivo compactado`
|
||||
- a coerência visual e institucional do fork depende da sincronização correta entre recursos, idiomas e binários locais
|
||||
- a normalização de `Lang/` deve continuar sendo executada pelo script de build para evitar regressões na aba `Language`
|
||||
|
||||
## Resultado consolidado
|
||||
|
||||
A release `7-Zip Fork 2026.3.19.0` transforma o projeto em uma variante operacionalmente mais orientada a fluxos avançados de empacotamento, com suporte nativo a múltiplos destinos por item, identidade institucional do fork, pipeline de distribuição autocontido, cobertura de localização ampliada e ciclo de instalação e desinstalação mais controlado.
|
||||
|
||||
## Autoria
|
||||
|
||||
**Fernando Nillsson Cidade**
|
||||
|
||||
---
|
||||
|
||||
## English
|
||||
|
||||
# Release Notes: 7-Zip Fork
|
||||
|
||||
**Version:** 2026.3.19.0
|
||||
**Author:** Fernando Nillsson Cidade
|
||||
|
||||
## Technical release summary
|
||||
|
||||
This release consolidates a set of structural and functional changes on top of the 7-Zip codebase, with primary focus on expanding the GUI compression workflow, establishing fork-specific product identity, reorganizing the build pipeline, synchronizing local language assets, producing the installer locally, and strengthening the uninstall lifecycle.
|
||||
|
||||
From an architectural perspective, version `2026.3.19.0` directly affects these subsystems:
|
||||
|
||||
- GUI compression interface
|
||||
- update and compression backend routing
|
||||
- `About 7-Zip` dialog
|
||||
- language lookup and synchronization mechanism
|
||||
- File Manager and installer build pipeline
|
||||
- installer and Windows product metadata
|
||||
- uninstaller and cleanup of DLLs and temporary artifacts
|
||||
|
||||
## Release scope
|
||||
|
||||
### Impacted components
|
||||
|
||||
- `CPP/7zip/UI/GUI/CompressDialog.cpp`
|
||||
- `CPP/7zip/UI/GUI/CompressDialog.h`
|
||||
- `CPP/7zip/UI/GUI/CompressDialog.rc`
|
||||
- `CPP/7zip/UI/GUI/CompressDialogRes.h`
|
||||
- `CPP/7zip/UI/GUI/UpdateGUI.cpp`
|
||||
- `CPP/7zip/UI/Common/Update.h`
|
||||
- `CPP/7zip/UI/FileManager/AboutDialog.cpp`
|
||||
- `CPP/7zip/UI/FileManager/AboutDialog.rc`
|
||||
- `CPP/7zip/UI/FileManager/AboutDialogRes.h`
|
||||
- `CPP/7zip/UI/FileManager/LangUtils.cpp`
|
||||
- `C/Util/7zipInstall/7zipInstall.c`
|
||||
- `C/Util/7zipUninstall/7zipUninstall.c`
|
||||
- `CPP/7zip/Bundles/Fm/makefile`
|
||||
- `CPP/7zip/UI/GUI/makefile`
|
||||
- `CPP/Build.mak`
|
||||
- `.vscode/7zip-installer-task.ps1`
|
||||
- `Lang/*`
|
||||
- `InstallerAssets/*`
|
||||
|
||||
## Consolidated functional changes
|
||||
|
||||
### 1. `Add to Archive` dialog expansion
|
||||
|
||||
The GUI compression flow was expanded to support both multi-item and multi-destination scenarios within the same dialog, without requiring an external manual mapping step.
|
||||
|
||||
#### 1.1 Independent groups per selected item
|
||||
|
||||
When multiple files or directories are selected in the main GUI and the user triggers `Add`, the dialog now creates one logical group per selected item. Each group maintains isolated state and widgets, including:
|
||||
|
||||
- visual identification of the source item
|
||||
- per-group output quantity control
|
||||
- independent output path fields
|
||||
- local persistence of the selected item's base name
|
||||
|
||||
This change replaces the previous model, which operated over a single aggregated collection, with a structure of independent groups directly associated with the source item.
|
||||
|
||||
#### 1.2 Multiple outputs per group
|
||||
|
||||
Each group supports up to 5 archive outputs. To enable this, both the resource layer and the dialog layer were expanded to instantiate multiple `Archive` fields and multiple `...` buttons while keeping the visual state synchronized with the internal state.
|
||||
|
||||
Consolidated behavior:
|
||||
|
||||
- the first group output is initialized with the suggested default path
|
||||
- additional outputs remain blank until explicit user action
|
||||
- changes to `Quantity` resize the active set of outputs
|
||||
- the `...` browser acts on the correct line inside the corresponding group
|
||||
|
||||
This removes the previous behavior where extra outputs incorrectly inherited the same initial path from the first item.
|
||||
|
||||
#### 1.3 Dynamic runtime layout
|
||||
|
||||
The dialog no longer reserves a fixed block of space for five always-visible outputs. Instead, the window now adapts its vertical layout according to:
|
||||
|
||||
- number of loaded groups
|
||||
- number of enabled outputs in each group
|
||||
- whether extra lines need to be shown or hidden
|
||||
|
||||
In practical terms, this required restructuring control positioning, dialog height calculation, and visibility handling for widgets tied to each output line.
|
||||
|
||||
#### 1.4 File name and extension generation fixes
|
||||
|
||||
The archive name composition flow was corrected to resolve extension normalization issues, especially in cases where the user-provided name already ended with the current format suffix.
|
||||
|
||||
Fixed issues:
|
||||
|
||||
- `Download.7z.7z`
|
||||
- `.7z..7z`
|
||||
- empty names derived from directories with trailing separators
|
||||
- incorrect extension reapplication when the format changed
|
||||
|
||||
The extra-output update flow was also adjusted so that blank lines do not receive artificial extensions automatically.
|
||||
|
||||
### 2. Compression backend adjustments
|
||||
|
||||
The backend responsible for preparing and dispatching compression operations was expanded to accept the new model of outputs per group and per item.
|
||||
|
||||
#### 2.1 State propagation between GUI and update layer
|
||||
|
||||
The options structure transported between the dialog and the backend was extended to support:
|
||||
|
||||
- multiple paths per group
|
||||
- association between selected items and their corresponding outputs
|
||||
- preservation of legacy behavior when the operation remains simple
|
||||
|
||||
The main integration points for this consolidation were:
|
||||
|
||||
- `CPP/7zip/UI/GUI/UpdateGUI.cpp`
|
||||
- `CPP/7zip/UI/Common/Update.h`
|
||||
|
||||
#### 2.2 Fix for incorrect extension reapplication
|
||||
|
||||
The File Manager flow that originally entered with automatic archive-name mode was adjusted to respect paths already made explicit in the GUI, preventing double extension reapplication after user confirmation.
|
||||
|
||||
### 3. `About 7-Zip` dialog customization
|
||||
|
||||
The `About 7-Zip` dialog was expanded to preserve the original project block while adding a fork-specific institutional block with maintainer identity.
|
||||
|
||||
#### 3.1 Additional content introduced
|
||||
|
||||
The dialog now includes:
|
||||
|
||||
- a note that the build refers to a fork
|
||||
- fork version identification
|
||||
- fork reference date
|
||||
- author-specific copyright
|
||||
- a link to the fork repository
|
||||
- preservation of the line stating that 7-Zip is free software
|
||||
|
||||
#### 3.2 Integration with resources and runtime
|
||||
|
||||
The implementation involved:
|
||||
|
||||
- resizing and reorganizing the `.rc` dialog layout
|
||||
- adding dedicated dialog controls
|
||||
- resolving texts through language resources
|
||||
- safe fallback to default strings when needed
|
||||
- handling the repository entry as a clickable action
|
||||
|
||||
### 4. Language and localization system
|
||||
|
||||
The fork consolidates root `Lang/` as the single source of truth for language files consumed by the GUI, the local File Manager runtime, and the installer stage.
|
||||
|
||||
#### 4.1 New language entries
|
||||
|
||||
New translation keys and blocks were added to support:
|
||||
|
||||
- the `Quantity` label
|
||||
- the expanded `About` dialog content
|
||||
- the fork repository line
|
||||
|
||||
In practice, the `Quantity` label was bound to ID `4021`, while block `2900` was extended to accommodate the additional information displayed by the `About` dialog.
|
||||
|
||||
#### 4.2 Language file normalization
|
||||
|
||||
A normalization flow was implemented to prevent the GUI `Language` tab from reporting errors such as `Error in Lang file`.
|
||||
|
||||
Key safeguards included:
|
||||
|
||||
- ordered insertion of IDs
|
||||
- removal of invalid duplicates
|
||||
- preservation of the structure expected by the 7-Zip parser
|
||||
- automatic synchronization between root `Lang/` and runtime language directories
|
||||
|
||||
#### 4.3 Expanded language coverage
|
||||
|
||||
Existing project languages now support the new `About` dialog elements and the `Quantity` label, with synchronization to:
|
||||
|
||||
- `CPP/7zip/UI/FileManager/x64/Lang`
|
||||
- `CPP/7zip/Bundles/Fm/x64/Lang`
|
||||
- `dist/installer-full/stage/Lang`
|
||||
|
||||
### 5. Build pipeline and installer reorganization
|
||||
|
||||
The installer pipeline was redesigned to remove the dependency on downloading the official installer as the assembly base.
|
||||
|
||||
#### 5.1 Replacing the download-based model
|
||||
|
||||
Previously, the packaging flow depended on:
|
||||
|
||||
- downloading the official installer
|
||||
- extracting an external payload
|
||||
- overlaying local binaries afterwards
|
||||
|
||||
Now, the installer `stage` is assembled locally from:
|
||||
|
||||
- binaries compiled in the workspace
|
||||
- static assets versioned in the repository
|
||||
- local language assets
|
||||
- local project documentation
|
||||
|
||||
#### 5.2 Introduction of local installer assets
|
||||
|
||||
Files previously obtained from the extracted official installer were moved into the repository and are now consumed directly from:
|
||||
|
||||
- `InstallerAssets/7-zip.chm`
|
||||
- `InstallerAssets/History.txt`
|
||||
- `InstallerAssets/descript.ion`
|
||||
|
||||
#### 5.3 Renamed final installer output
|
||||
|
||||
The final artifact generated by this fork is now:
|
||||
|
||||
- `dist/7z2026.3.19.0-x64.exe`
|
||||
|
||||
This replaces the previous default name derived from the upstream release number.
|
||||
|
||||
### 6. Installer and Control Panel customization
|
||||
|
||||
The installer was adjusted to persist fork-specific product metadata in Windows.
|
||||
|
||||
#### 6.1 Modified registry metadata
|
||||
|
||||
When the product is installed, the uninstall key now writes:
|
||||
|
||||
- `DisplayName = 7-Zip 2026.3.19.0 (x64)`
|
||||
- `DisplayVersion = 2026.3.19.0`
|
||||
- `Publisher = Fernando Nillsson Cidade`
|
||||
|
||||
These values are stored at:
|
||||
|
||||
- `Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\7-Zip`
|
||||
|
||||
#### 6.2 Consistency across binary, installer, and visual identity
|
||||
|
||||
This release aligns:
|
||||
|
||||
- installer file name
|
||||
- user-facing version string
|
||||
- fork identity shown in the `About` dialog
|
||||
- metadata displayed in Windows Control Panel
|
||||
|
||||
### 7. Uninstaller hardening
|
||||
|
||||
The removal subsystem was reinforced to reduce uninstall leftovers while avoiding aggressive behavior against Windows Explorer.
|
||||
|
||||
#### 7.1 Explicit cleanup of temporary files
|
||||
|
||||
The uninstaller now explicitly handles leftovers such as:
|
||||
|
||||
- `7-zip.dll.tmp`
|
||||
- related temporary variants
|
||||
|
||||
#### 7.2 Administrative elevation and safer removal
|
||||
|
||||
The flow now attempts to operate with proper privileges when needed, avoiding silent failures while removing files installed under protected system directories.
|
||||
|
||||
#### 7.3 Fix for the DLL-in-use removal strategy
|
||||
|
||||
An intermediate solution based on broad Explorer process termination proved too intrusive because it could close File Explorer windows and temporarily affect the taskbar. The consolidated implementation replaces that behavior with a less aggressive shell-extension unload strategy that preserves the user environment.
|
||||
|
||||
Expected result:
|
||||
|
||||
- fewer leftover DLLs
|
||||
- lower need for reboot fallback
|
||||
- no side effect of globally closing Explorer
|
||||
|
||||
### 8. Incremental build robustness
|
||||
|
||||
Dependency corrections were added to avoid invalid combinations of old object files with newer headers and to guarantee resource regeneration whenever `.rc` files change.
|
||||
|
||||
#### 8.1 Applied adjustments
|
||||
|
||||
- explicit dependencies for modules consuming `CompressDialog.h`
|
||||
- explicit dependencies for modules consuming `Update.h`
|
||||
- explicit dependencies from `AboutDialog.rc` and `AboutDialogRes.h` to regenerate `resource.res`
|
||||
- automatic synchronization of local language bases used by test binaries
|
||||
|
||||
#### 8.2 Practical benefits
|
||||
|
||||
These changes reduce issues such as:
|
||||
|
||||
- unexpected `7zFM.exe` termination after structural dialog changes
|
||||
- relinking binaries with outdated resources
|
||||
- runtime loading stale language files
|
||||
|
||||
## Technical impact by subsystem
|
||||
|
||||
### Compression GUI
|
||||
|
||||
- new per-item grouping model
|
||||
- new multiple-output-per-group model
|
||||
- runtime-recalculated layout
|
||||
- file name and extension normalization fixes
|
||||
|
||||
### Update and compression backend
|
||||
|
||||
- expanded options structure
|
||||
- proper propagation of GUI-configured output paths
|
||||
- preserved compatibility with simple workflows
|
||||
|
||||
### Resources and localization
|
||||
|
||||
- expanded `.rc` resources
|
||||
- new control/resource IDs
|
||||
- synchronization from root language base to runtime
|
||||
- automatic normalization of translation files
|
||||
|
||||
### Installer
|
||||
|
||||
- local stage generation
|
||||
- use of repository-versioned assets
|
||||
- final installer name aligned with fork identity
|
||||
- custom product metadata in Windows
|
||||
|
||||
### Uninstaller
|
||||
|
||||
- stronger temporary-file cleanup
|
||||
- safer DLL removal flow
|
||||
- less intrusive shell and Explorer behavior
|
||||
|
||||
## Relevant artifacts in this release
|
||||
|
||||
- `CPP/7zip/UI/FileManager/x64/7zFM.exe`
|
||||
- `CPP/7zip/Bundles/Fm/x64/7zFM.exe`
|
||||
- `dist/7z2026.3.19.0-x64.exe`
|
||||
- `Lang/*`
|
||||
- `InstallerAssets/*`
|
||||
|
||||
## Compatibility and operational notes
|
||||
|
||||
- the upstream 7-Zip base was preserved, with extensions focused mainly on the File Manager and the local build/install pipeline
|
||||
- the new compression logic primarily affects the GUI path driven by `Add to Archive`
|
||||
- visual and institutional consistency of the fork depends on correct synchronization between resources, languages, and local binaries
|
||||
- `Lang/` normalization should continue to be executed by the build script to avoid regressions in the `Language` tab
|
||||
|
||||
## Consolidated result
|
||||
|
||||
Release `7-Zip Fork 2026.3.19.0` turns the project into a variant more strongly oriented toward advanced packaging workflows, with native support for multiple output destinations per item, fork-specific product identity, a self-contained distribution pipeline, expanded localization coverage, and a more controlled installation and uninstallation cycle.
|
||||
|
||||
## Authorship
|
||||
|
||||
**Fernando Nillsson Cidade**
|
||||
Loading…
Add table
Add a link
Reference in a new issue