Como posso fazer uma " comparação de conteúdo " de dois (ou mais) arquivos MSI e ver o que é realmente diferente dentro dos arquivos - em vez de fazer uma comparação binária inútil ? (que obviamente só me diz se estou lidando com cópias do mesmo arquivo ou não).
Arquivos MSI
Um arquivo MSI contém um banco de dados MS SQL primitivo embutido em um arquivo de armazenamento estruturado COM (um sistema de arquivos em um arquivo com fluxos de armazenamento de vários tipos - o antigo formato COM/OLE do MS Office).
Você pode extrair arquivos de um MSI ou pode descompilar todo o MSI com todos os seus fluxos. Cada abordagem é descrita brevemente a seguir.
Com a descompilação (quase) transparência total é possível, com exceção de ações personalizadas compiladas (geralmente escritas em C/C++). Código gerenciado e compilado (C#) pode realmente ser (teoricamente) descompilado.
Para determinar (aproximadamente) o que uma ação personalizada de caixa preta realmente faz, você pode capturar uma instalação MSI usando uma ferramenta de reempacotamento - que verifica o sistema antes e depois da instalação listando quaisquer alterações - você vê o que aconteceu, mas não como tem acontecido. Muito poucas pessoas têm a necessidade deste nível de escrutínio.
Somente Comparação de Arquivos
Esta é uma notícia antiga, mas se tudo o que você está preocupado é comparar os arquivos incorporados no MSI / setup.exe , você pode usar uma instalação administrativa para extrair os arquivos incorporados no MSI / setup.exe e usar qualquer ferramenta de comparação de arquivos para comparar os arquivos extraídos para cada versão:
setup.exe /a
msiexec.exe /a "MySetup.msi"
Se o MSI não tiver uma GUI adequada para permitir que você especifique uma pasta de saída interativamente, tente especificá-la por meio da linha de comando:
msiexec.exe /a "MySetup.msi" TARGETDIR="C:\MyOutputFolder
Os arquivos Setup.exe contendo arquivos MSI incorporados podem ser de vários tipos, alguns ponteiros:
Essencialmente, uma instalação administrativa extrai os arquivos de configuração dos arquivos CAB incorporados no próprio MSI (o CABS também pode ser externo) e os gera em uma estrutura de pastas organizada, refletindo aproximadamente seus destinos de destino pretendidos na instalação. Várias formas de compactação podem ser usadas em um MSI - todas tratadas pela instalação administrativa. Por favor, não descompacte arquivos MSI !
Finalmente, o
Media table
é ajustado para usar os arquivos de origem agora extraídos em vez dos arquivos CAB internos - e os arquivos CAB internos são excluídos potencialmente tornando o MSI de saída muito menor que o original. Fundamentalmente, todas as assinaturas digitais são removidas .Antigamente, os arquivos MSI eram armazenados em cache
%SystemRoot%\Installer
sem seus arquivos CAB (tornando-os pequenos), mas agora eles são armazenados em cache em tamanho real, aumentando potencialmente drasticamente os requisitos de armazenamento. Usar instalações administrativas é uma maneira de reduzir esse tamanho de cache (com a penalidade das assinaturas digitais removidas). Mais sobre isso aqui: Por que a MSI exige que o arquivo .msi original prossiga com a desinstalação?Mais detalhes sobre instalações administrativas aqui:
Qual é o propósito da instalação administrativa iniciada usando msiexec /a?
Extraia o MSI do EXE - executando uma instalação de administrador
"Comparação de conteúdo MSI"
Se você quiser determinar com mais detalhes o que é diferente entre dois arquivos MSI (por exemplo, versão 1 e 2 de um pacote), você pode se envolver um pouco mais usando um visualizador de arquivos MSI adequado ou um descompilador MSI .
Eu escrevi uma sinopse no stackoverflow.com sobre como comparar arquivos MSI . Foi-me sugerido adicionar um link aqui no serverfault.com para este conteúdo. Talvez seja útil para administradores de sistema.
Eu não quero ter um problema de fonte dupla, então vou apenas vincular à versão stackoverflow (espero que seja uma boa prática): Como posso comparar o conteúdo de dois (ou mais) arquivos MSI? Esta resposta lista várias ferramentas (gratuitas e comerciais) que podem ajudá-lo a fazer uma "comparação real".
As habilidades avançadas de descompilação de MSI
dark.exe
do kit de ferramentas WiX podem ser de interesse particular . Além da descompilação de arquivos MSI, o conteúdo vinculado também descreve como descompactarsetup.exe
arquivos criados com o kit de ferramentas WiX (um recurso de bootstrapper que pode instalar vários arquivos MSI e arquivos EXE incorporados em sequência). O conteúdo descompactado pode, por sua vez, ser desmembrado pelo mesmodark.exe
arquivo (desde que sejam arquivos MSI).Deixe-me também lançar um link sobre como lidar com arquivos setup.exe feitos com outras ferramentas de implantação .