E52C Adding true MSI support by Keboo · Pull Request #606 · velopack/velopack · GitHub
[go: up one dir, main page]

Skip to content

Conversation

@Keboo
Copy link
Member
@Keboo Keboo commented Apr 8, 2025

This is a major update to the msi files that Velopack can create for Windows.
This is a breaking change for the vpk CLI. The only MSI deployment tool is replaced with this new --msi option.
There is a sample branch under kdb/msi-example showing the usage with the Avalonia sample application. The updates are under the dev-scripts.
Unlike the previous MSI deployment tool that was modeled after the Clowd.Squirrel (and parent Squirrel project) that just injects a registry key to run on the startup of each user and perform a per-user install, this MSI is a true installer that can be used as a replacement for the Setup.exe.

The MSI currently has the following behavior:

  • It will always display a UI
  • It leverages the previous --msiVersionOverride <Version> option to allow setting the MSI version as it is more restrictive than the normal version number.
  • It will default to a per machine level install, giving the user the option to select per user. The assumption here is that by using the MSI rather than the Setup.exe that the intent is either to support a sys admin or GPO install. Optionally the developer can remove this screen my specifying --instLocation perUser or --instLocation perMachine when running vpk pack to specify the location ahead of time. In these cases, the installation location dialog will not be shown to the user.
  • An optional license can be specified with --instLicense <License Markdown File>.
  • It offers very limited customization for the text content. It supports --instWelcome <Welcome Markdown File>, --instReadMe <Readme Markdown File>, and --instConclusion <Conclusion Markdown File>. Be aware that though these are markdown files, the MSI really only supports plain text in these fields so nearly all formatting is stripped out.
  • It does not currently expose the ability to leverage any localization parameter (this is expected to be handled with Support localization of installer/update dialogs #60)
  • It supports setting the header and background bitmaps via the --msiBanner <Banner Bitmap> and --msiLogo <Background Bitmap> respectively. More discussion is needed on appropriate defaults for these.
  • It does not do the same bootstrapping of dependencies that the Setup.exe does.

Fixes #389

caesay and others added 30 commits April 5, 2025 22:11
bat scripting to work around Rust CLI argument parsing on windows
Fixing output logging
Updating to use it to manually pack
Adding temp directory for when packages directory cannot be created.
And removing shortcuts
Adding check for writable directory
Adding launch after install
Fixing file loading parameters
@Keboo Keboo marked this pull request as ready for review September 16, 2025 04:30
@codecov
Copy link
codecov bot commented Sep 16, 2025

Codecov Report

❌ Patch coverage is 39.14373% with 1393 lines in your changes missing coverage. Please review.
✅ Project coverage is 40.82%. Comparing base (fa48e3c) to head (cab8891).
⚠️ Report is 9 commits behind head on develop.

Files with missing lines Patch % Lines
src/lib-rust/src/process_win.rs 49.84% 166 Missing ⚠️
src/bins/src/windows/splash.rs 25.11% 158 Missing ⚠️
src/bins/src/shared/dialogs_windows.rs 0.74% 134 Missing ⚠️
src/wix-dll/src/msi.rs 0.00% 97 Missing ⚠️
src/vpk/Velopack.Packaging/Rtf/RtfRenderer.cs 0.00% 71 Missing ⚠️
src/wix-dll/src/lib.rs 0.00% 71 Missing ⚠️
src/lib-rust/src/process_unix.rs 0.00% 58 Missing ⚠️
src/lib-rust/src/manager.rs 0.00% 52 Missing ⚠️
...c/vpk/Velopack.Packaging.Windows/Msi/MsiBuilder.cs 55.65% 43 Missing and 8 partials ⚠️
src/lib-rust/src/wide_strings.rs 57.14% 48 Missing ⚠️
... and 59 more
Additional details and impacted files
@@             Coverage Diff             @@
##           develop     #606      +/-   ##
===========================================
- Coverage    40.87%   40.82%   -0.06%     
===========================================
  Files          244      267      +23     
  Lines        18355    19457    +1102     
  Branches      2045     2128      +83     
===========================================
+ Hits          7503     7943     +440     
- Misses       10497    11125     +628     
- Partials       355      389      +34     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

The test DownloadsLatestFullVersion needs to extract the root directory
to ensure that it is properly cleaned up after the test runs, so that
the test can run multiple times without error.
Fixed pathing issues on Windows pack tests
Adding pipeline logging for missing wix dll
Keboo and others added 10 commits September 20, 2025 23:28
This is needed for MSI tests that rely on the velopack_wix.dll
Removes the binary listing step from the build workflow,
as it is not needed and clutters the output.
Adds IProcessImpl.Exit for controlled process termination, replaces Environment.Exit with IProcessImpl.Exit calls, and adds a test implementation for IProcessImpl.
@jaspet
Copy link
jaspet commented Nov 3, 2025

@Keboo, is this code going to be merged at some point? We're looking for an MSI installer for a project, and would love to use VeloPack. The app consists of a WPF client, a console client, and a Windows service. Because of the Windows service, I don't think we can currently use VeloPack. Thanks!

@Keboo
Copy link
Member Author
Keboo commented Nov 5, 2025

@jaspet Yes this is what we are working on trying to get merged. However, this is only going to add support for generating an MSI and support for installing an application for all users vs per user. It does not add support for system services. This is on our roadmap but no ETA to report for that feature right now.

Adds an explicit wxPython installation step for the `PythonWXPython` sample when building on macOS runners. This ensures the `libpng` dependency is met, preventing potential CI build failures caused by the missing library.
@Ddgdhfjb
Copy link

Are there any Updates on when this will get merged?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Rust spawn sets bInheritHandles to true

6 participants

0