←back to thread

135 points rmast | 5 comments | | HN request time: 0.658s | source

Hey everyone!

I'm excited to share a small web app I built that allows you to view and extract the contents of Windows MSI installers directly in your browser. It's essentially a web-based "lessmsi" powered by Pyodide.

You can try it out at: https://pymsi.readthedocs.io/en/latest/msi_viewer.html

My motivation for building this was from part of my day job -- I often get Windows MSI installers and need to extract files while preserving the relative directory structure and filenames, as they would appear after a full installation. The existing tools I found were good but limited in which platforms they support: lessmsi works great on Windows, while msitools works for Linux/macOS. Neither is a truly cross-platform solution that works on any major OS.

So we developed pymsi (a pure Python library, available on GitHub at https://github.com/nightlark/pymsi) to handle reading and extracting MSI files from Python. Then I realized that since pymsi has no native dependencies, it could potentially run in a web browser using Pyodide. After a bit of "vibe coding" and fixing some "hallucinated" functions/classes that don't exist in pymsi, the result was this client-side web app.

If you need an MSI file to experiment with, older versions of PowerToys included the installer in .msi form, such as this one: https://github.com/microsoft/PowerToys/releases/download/v0....

Note that the underlying pymsi library hasn't been extensively tested against a bunch of MSI installers yet, so there might still be lingering bugs. If you come across any issues, please don't hesitate to report them in on the GitHub repository (https://github.com/nightlark/pymsi/issues).

I'd love to hear your feedback and answer any questions!

1. Lanrei ◴[] No.44332611[source]
Neat. I usually just use 7zip to open .exe and .msi files.
replies(2): >>44332717 #>>44333591 #
2. hypercube33 ◴[] No.44332717[source]
I don't think 7zip really can see into a lot of janky MSI files to get the actual installed content, can it?...it can technically break open NSIS files and get the source but that is disabled in code after 15.05 (GitHub has a mod to renable source extraction fyi) and yes self extracting exe files.
replies(1): >>44333435 #
3. rmast ◴[] No.44333435[source]
My experience with 7zip has been that it can read the tables and cab files from MSI files, but when you go to extract the contents you just get the raw files without the directory restructure associated with the MSI file (and the names of the extracted files can also have issues).
4. atmanactive ◴[] No.44333591[source]
Let's not forget Universal Extractor: https://github.com/Bioruebe/UniExtract2
replies(1): >>44340105 #
5. WarOnPrivacy ◴[] No.44340105[source]
I had forgotten. For years and years it was part of my install everywhere kit. This is a good reacquaintance.