v2026.3.22.0

This commit is contained in:
Fernando Nillsson Cidade 2026-03-22 01:40:38 -03:00
parent 1eca44e7a7
commit 94a386e0f4
2 changed files with 2 additions and 689 deletions

2
README.md Normal file
View file

@ -0,0 +1,2 @@
# 7-Zip on GitHub
7-Zip website: [7-zip.org](https://7-zip.org)

View file

@ -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**