Comment puis-je comparer le contenu de deux (ou plus) fichiers MSI?

Comment puis - je faire un" content compare " de deux (ou plus) MSI files et voir ce qui est réellement différent à l'intérieur des fichiers-au lieu de faire un inutile binaire comparer ? (ce qui évidemment ne me dit que si je m'occupe de copies du même fichier ou pas).

Certains pertinentes et problème typique des scénarios :

  • notre système de construction crache sortir des fichiers MSI comme crazy, et parfois nous avons besoin de comprendre quelles différences existent entre les différents fichiers MSI (lire: quelque chose a changé, et maintenant nous échouons le déploiement).
  • nous avons des fichiers MSI compilés à partir des mêmes sources dans des endroits différents, et certains d'entre eux ne parviennent pas à exécuter les rapports système.BadImageFormatException - comment déboguer ce que sont les différences dans les fichiers MSI? (une réponse traitant de cette erreur spécifiquement ici: les applications dépendent-elles de l'environnement où elles ont été compilées? ).
  • les fichiers MSI peuvent être compilés avec toutes sortes d'outils, mais pour les utilisateurs stackoverflow de tels fichiers sont probablement le plus souvent créés en utilisant WiX ou Visual Studio Installer Projects (outils gratuits).

il s'agit d'une Q/A-style question sur le sujet de la comparaison de vos fichiers MSI compilés pour déterminer quelles sont les véritables "différences de contenu" existent.

5
demandé sur Stein Åsmul 2018-01-28 05:16:09

1 réponses

à propos des fichiers MSI

grossièrement parlant MSI les fichiers sont les fichiers de stockage com-structuré - essentiellement un système de fichiers dans un fichier - avec des flux de contenu différent, dont l'un est un stripped down base de données SQL Server (dans les termes les plus génériques que je crois). Pour autant que les fichiers MSI soient lisibles, le contenu (de différents formats et types) peut être comparé.

Tech Note : il est concevable qu'un MSI qui déclenche un System.BadImageFormatException n'est tout simplement pas exécutable ( msiexec.exe ne peut pas l'exécuter), mais il peut encore être lisible - et donc comparable (veuillez ajouter un commentaire pour vérifier si vous l'éprouvez).

Flux : Certains flux dans les MSI sont tables avec les valeurs de chaîne. Il peut aussi y avoir des flux pour embedded cab-archives utilisé pour stocker des fichiers à déployer, et des tables avec contenu binaire seulement - comme le Binary table où compilé et les actions personnalisées Non compilées sont stockées avec d'autres contenus binaires le besoin de configuration. Et il y a un spécial " flux de résumé " et une table avec des icônes stockées dans leur natif, format binaire, et la liste continue... Pour la plupart des tables, nous pouvons comparer les chaînes dans chaque table jolie tout comme nous comparons le texte dans un document Word (qui également utilisé pour être des fichiers OLE / COM - bien que les nouvelles versions utilisent maintenant Open Office XML ) et obtenir un rapport détaillé des différences. Pour ce faire, vous avez évidemment besoin d'un outil spécial pour le travail-un capable de trouver sa voie à travers tous les flux pertinents. Certains outils commerciaux et gratuits pour cela sont énumérés ci-dessous.

contenu binaire : avant d'élaborer ceci, je dois noter que la comparaison de contenu dans le Binary Table , Cabs Table , Icon Table - ou toute autre table binaire, vous permettra généralement une comparaison binaire seulement (en particulier pour les fichiers dll et exe d'action personnalisée compilés). Script d'actions personnalisées 1519300920" - dans la table binaire - peut être comparé comme texte, mais compilé des actions personnalisées sont binaires comparer uniquement. Donc, si votre problème émane d'un personnalisé compilé action, vous ne pouvez pas vraiment le voir dans une comparaison directe (vous voyez la différence binaire seulement). vous avez besoin de frapper votre système de contrôle source pour voir quel code a été utilisé pour compilé des actions personnalisées de toute sorte - espérons que vous avez un bonne pratique d'étiquette ainsi vous pouvez trouver le code source réel utilisé dans chaque configuration. Je n'utilise pas cette pratique, mais pour les versions internes de l'entreprise peut-être que vous pouvez même inclure votre dll de débogage-construire pour votre personnalisé compilé action, et essayer d'attacher le débogueur au Code d'exécution pour vraiment comprendre ce qui se passe? Je n'utiliserais pas le mode de débogage dll pour une diffusion publique, à moins d'avoir clarifié les risques. Le code de débogage peut être truffé de boîtes de messages de débogage (inattendus) (utilisées comme points d'entrée pour joindre le débogueur) et d'autres problèmes qui ne devraient jamais frapper un paquet de production.

en y repensant, vos fichiers cab et les fichiers icon peuvent certainement être comparés à leurs correspondants versions dans des fichiers MSI plus anciens (ou plus récents) en utilisant la technique de décompiler les fichiers MSI en utilisant dark.exe - qui est décrite ci-dessous. Ensuite, en utilisant un bon outil de comparaison (Beyond Compare est mentionné ci-dessous), vous pouvez faire une différence complète sur le contenu du fichier cab entre les différentes versions MSI (et certains des fichiers pourraient être des fichiers texte, qui pourrait être texte comparé). Je suppose que les cabs et les icônes sont en quelque sorte des" binaires transparents " dans un format ouvert par opposition aux binaires compilés (avec des actions personnalisées et plus) qui ne sont pas intrinsèquement décompilables ou inspectables (à moins que vous ne sachiez comment décompiler les binaires gérés).

en conclusion : les fichiers MSI sont entièrement transparents, à l'exception des actions personnalisées compilées . cette transparence est l'un des principaux avantages de MSI . La plupart des avantages de L'installateur Windows, par rapport aux technologies de déploiement précédentes, se concentrent généralement autour de l'entreprise le déploiement. Malheureusement les développeurs ne peuvent voir que les mauvais aspects de MSI: le (potentiel) MSI anti-patterns (vers le bas - très désordre et ad-hoc pour l'instant). Certes, certains de ces problèmes sont très graves et violer le principe de moindre étonnement". Les développeurs-pourquoi ont d'autres choses tout aussi importantes à faire - peuvent franchement se gratter la tête dans l'incrédulité.

ne vous y trompez pas: MSI a massif avantages sociaux liés au déploiement ( voir le même lien que ci-dessus, vers le bas ). condensé : exécution silencieuse fiable, gestion à distance, rollback, journalisation, fonction de désinstallation implicite, droits élevés, ligne de commande standardisée, transparence, transforme pour la personnalisation d'installation standardisée et administrateur Installer pour extraire des fichiers de manière fiable. Juste pour nommer les grands rapidement.

beaucoup de digressions jusqu'à présent - let's get au point . Quels outils peuvent être utilisés pour comparer les fichiers MSI?


Outils Commerciaux

Several commercial deployment tools such as Installshield , installateur avancé et beaucoup d'autres outils MSI ont le soutien pour affichage et comparaison des fichiers MSI. Peut - être que j'ajoute trop de liens, mais permettez-moi d'utiliser ma politique habituelle de "si vous lien à un, vous lien à tout le monde" - il devrait gagner du temps et des recherches Google.

comme une note spéciale - nostalgique - la meilleure caractéristique MSI-diff que j'ai jamais vu était dans Wise Package Studio . Il était la tête et les épaules au - dessus du reste pour être honnête-toujours de travail, de couleur bien codée et juste facile à comprendre. Cet outil n'est plus pour vente comme décrit ici: quel produit d'installation à utiliser? InstallShield, WiX, Wise, Advanced Installer, etc (si vous avez une équipe de packaging dans votre société, peut-être qu'ils ont une licence de rechange autour?).


Outils Gratuits

les outils commerciaux sont bons, mais il ya aussi plusieurs alternatives libres qui peuvent être utilisés pour comparer les fichiers MSI - et ci-dessous est une liste de certains d'entre eux avec quelques conseils pour la façon d'utiliser chaque outil (d'une manière plutôt minimaliste).

il y a plus de détails ajoutés pour dark.exe - qui n'est pas un outil de comparaison pour les fichiers de stockage com-structuré du tout, mais un moyen de décomposer les fichiers MSI aux fichiers source Wix XML et extraire tous les fichiers de soutien (icônes, binaires, cabs, fichiers de configuration) - leur permettant d'être comparés avec des outils de comparaison texte / binaire réguliers par la suite.

1. Orca (MSI SDK)

Microsoft propre MSI SDK outil / viewer appelé Orca pouvez afficher les fichiers MSI et les modifier, mais il n'y a pas de support direct pour la comparaison de deux fichiers MSI (que je le connais). Je suppose que vous pouvez exporter les tableaux et les comparer, mais d'autres outils ont plus de fonctionnalités intégrées. Cette option est mentionnée puisque vous pouvez déjà Orca installé et puis c'est probablement un moyen rapide pour obtenir une diff simple fait. Le " pauvre homme "option ".

vous avez peut-être déjà l'installateur . Si vous avez Visual Studio installé, essayez de chercher Orca-x86_en-us.msi et installez-le. Trouvez ensuite Orca dans le menu Démarrer. Techniquement Orca est installé dans le cadre de le SDK de Windows (grand, mais téléchargement gratuit). Si vous n'avez pas Visual Studio installé, peut-être connaissez-vous quelqu'un qui le sait? Il suffit de leur faire rechercher ce MSI et de vous envoyer (c'est un tout petit fichier mb) - devrait leur prendre quelques secondes. Si ce n'est pas le cas, vous pouvez toujours télécharger le fichier de configuration de Windows SDK

2. Super Orca (outil tiers gratuit)

Super Orca permettra une comparaison rudimentaire de deux fichiers MSI. Mon test smoke semble révéler que des champs avancés tels que le flux de synthèse peut être ignoré. En d'autres termes une table droite comparent seulement. Il pourrait y avoir d'autres restrictions. Peut-être que c'est assez bon? Il est facile à utiliser.

3. widiffdb.vbs (MSI SDK)

le MSI SDK a un VBScript que vous pouvez utiliser pour visualiser les différences entre deux fichiers MSI. Il est appelé widiffdb.vbs ( msdn ). Avec cet outil je peux voir les différences de flux de résumé ignorées par Super Orca. Rien MSI Le SDK fait autorité.

  • lancer un lien vers la liste complète de ces MSI SDK VBScripts - à des fins diverses. Ne soyez pas confus, seulement widiffdb.vbs est nécessaire pour comparer les fichiers MSI, mais il y a beaucoup de scripts utiles pour d'autres buts à trouver.
  • si vous avez Visual Studio installé, cherchez simplement widiffdb.vbs . Lancer avec cscript.exe et passer dans le chemin complet à deux fichiers MSI pour comparer ils. La sortie de la console.

4. sombre.exe (WiX outils de l'open source)

Le sombre.exe binary from the WiX toolset (une boîte à outils qui a probablement été utilisée pour compiler certains de vos fichiers MSI). Ce dark.exe est un" désassembleur "ou" decompiler " pour les fichiers MSI. Il convertira les fichiers MSI en wxs format XML (le propre format de WiX utilisé pour compiler des fichiers MSI en premier lieu), avec un certain nombre de fichiers binaires extraits (si vous utilisez les options et les drapeaux de décompression corrects).

les fichiers source wxs peuvent être comparés comme des fichiers source texte réguliers (mon outil préféré pour cela est Beyond Compare , mais c'est un outil commercial - il ya beaucoup d'outils de comparaison de texte - y compris ceux dans Visual Studio). Les fichiers binaires peuvent évidemment être binaire comparée. N'importe quel fichier CAB extrait peut être comparé à un autre fichier cab similaire d'une autre version de configuration MSI par exemple.

Voici un exemple de ligne de commande:

dark.exe -x outputfolder MySetup.msi
  • dans de nombreux cas, cela donnera une très bonne comparaison des fichiers MSI et vous devriez être en mesure de déterminer ce qui est vraiment différent.

  • les binaires extraits pourraient être fichiers de script(EBT, etc...) ou n'importe quel nombre d'autres binaires (par exemple compilé DLL actions personnalisées). Dans ce dernier cas, vous ne pouvez pas vraiment le décompiler davantage - à moins qu'il ne s'agisse d'un binaire.net et que vous ayez une expertise dans la décompilation de tels binaires.

  • cependant, il convient de noter que les fichiers MSI générés par WiX compilés en utilisant les mêmes fichiers source WiX peuvent être différents pour plusieurs raisons:

    • le même fichier source WiX peut également être compilé avec différent compilateur et linker paramètres , et cela peut affecter le fichier MSI généré de plusieurs façons. Pour voir tous les commutateurs, télécharger et installer WiX et juste écrire candle.exe ou light.exe dans un prompt de commande et cliquer sur enter .

    • certains champs tels que package GUIDs et product GUIDs peuvent être définis à auto-generate dans le fichier wxs. Le champ correspondant qui en résulte dans le fichier MSI généré sera évidemment différent pour chaque construction dans ce cas.

      • Je n'ai pas une liste complète des champs qui peuvent être définis pour auto-générer à ce point (si vous savez, peut-être appuyer sur Modifier et modifier ceci in situ).

      • les champs auto-générés mentionnés peuvent aussi être codés en dur (ce qui n'est pas bon pour le paquet GUID, mais c'est une autre, longue histoire-il suffit de savoir que si vous trouvez deux fichiers MSI qui sont binaires différents avec le même paquet GUID, alors vous êtes dans de sérieux problèmes - s'ils sont dans le wild - Windows Installer les traitera comme le même fichier par définition). Les codes des paquets doivent toujours être générés automatiquement. Digression.

    • les fichiers MSI eux - mêmes ont évidemment des informations de date de fichier différentes ayant été compilées séparément-juste pour énoncer l'évidence.

et une note spéciale quelque peu étrangère au sujet en question, mais importante néanmoins: vous pouvez utiliser dark.exe pour décompiler les exécutables compilés avec la fonctionnalité de Gravure De WiX. C'est WiX est fonction bootstrapper utilisée pour installer un ou plusieurs fichiers MSI et / ou EXE dans l'ordre - l'un après l'autre. Ces bootstrappers sont des fichiers EXE et vous pouvez les décompresser dans leurs fichiers MSI et/ou EXE constitutifs:

dark.exe -x outputfolder setup.exe

il suffit d'ouvrir une invite de commande, CD vers le dossier où la configuration.l'exe réside. Alors spécifiez la commande ci-dessus. Échantillon de béton: dark.exe -x outputfolder MySetup.exe . Le dossier de sortie contiendra un couple de sous-dossiers contenant les deux extrait les fichiers MSI et EXE et les manifestes et le fichier de ressources pour L'interface graphique de Burn. Tous les fichiers MSI peuvent ensuite être démontés comme décrit ci-dessus pour produire un fichier source WXS.

5. Place (gratuit outil tiers - avec plus version disponible)

Pour une raison que je n'ai jamais utilisé cet outil activement, mais testé plusieurs fois. En le testant à nouveau, il semble faire le travail de comparer deux fichiers MSI, bien qu'à partir d'un option de menu étrange (qui m'a fait penser que la fonctionnalité ne fonctionnait pas avant).

  • ouvrez une MSI, puis allez à Transform => Compare Against... et parcourez la MSI à laquelle vous voulez comparer la première.
  • comparaison semble OK, et je vois qu'il y a des changements dans le flux de résumé - par exemple - mais le diff ne semble pas montrer ce qui est différent (à moins que je ne le vois pas).
  • pour voir le résumé des changements de flux, ouvrez les deux dossiers dans les instances Instées séparées et aller Tables => Summary Info... dans les deux instances. Maintenant, comparez les informations dans les fiches de propriétés. Vous pouvez également utiliser le script widiffdb.vbs mentionné ci-dessus.

6. Autres Outils ... (COM-fichier de stockage structuré de téléspectateurs)

il y a sans doute beaucoup d'autres outils capables de visualiser des fichiers de stockage com-structurés, mais je pense que les options ci-dessus devraient suffire pour la plupart des utilisateurs. Je vais ajouter un lien installsite.org la liste de MSI outils de nouveau.

7. Advanced Installer (outil commercial avec quelques caractéristiques libres)

cet outil commercial pourra fonctionner comme un viewer et permettre certaines opérations de base sur les fichiers MSI, même sans l'exécution avec une licence complète. Le bon côté, c'est que tu n'as même pas besoin d'utiliser les tables brutes., mais peut utiliser une interface utilisateur beaucoup plus agréable à "hotfix" diverses choses dans le MSI. Par exemple divers paramètres de mise à niveau (Continuer ou échouer lorsque la désinstallation d'une mise à niveau majeure échoue, etc...).

les modifications apportées dans la Vue de L'éditeur de Table (vue droite de la table) ne seront pas visibles dans les autres"vues de l'Assistant". la raison en est expliquée ici .


Liens

7
répondu Stein Åsmul 2018-08-12 11:02:38