Repository navigation
Conversation
Contributor
|
What does an install mean for Eto? 🧐 |
Member
Author
|
Hey @Descolada, I don't know if I understand the question? This creates an installer so users can install the Eto application you've created, upgrade it, etc. Similar to how you can create packages for Linux, or a .dmg for Mac. These are meant to be a quick way to deploy your app without having to roll your own. Of course it's opt-in so if you need more control, you would use WiX, custom scripts to package, etc. |
Contributor
|
@cwensley ah I see, my confusion stemmed from thinking Eto more like a library, not as a complete framework. |
Set WindowsPackageFormats to msi;setup, similar to LinuxPackageFormats and EnableDmgBuild. The msi is written with msi.dll and makecab, and Setup.exe is compiled with the .NET Framework csc, so nothing beyond Windows is needed. Setup.exe installs the .NET runtime the app needs when it's missing, then runs the msi. Set a certificate or WindowsSignCommand to sign the app, msi and setup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he msi WindowsPackageLicense shows a license to accept (.rtf, .md, .txt or a link), and the msi and Setup.exe text comes in Windows' display language, set with WindowsPackageLanguages and WindowsPackageStrings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
WindowsPackageImage sets a square .ico or .png, otherwise the app's icon is used when it has a 48 pixel size. It's shown small at the top of each page, and large on the welcome and finished pages when it's 128 pixels or larger. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rmats is set Projects choose the configurations by setting WindowsPackageFormats conditionally, as Eto.Test.Wpf now does for Release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cwensley
force-pushed
the
curtis/windows-msi-installer
branch
from
November 13, 2026 10:17
49c00e3 to
3555bfe
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hitecture Built with appxpackaging.dll, which comes with Windows. The publisher is read from the signing certificate, and without one the package is unsigned for testing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cwensley
force-pushed
the
curtis/windows-msi-installer
branch
from
November 14, 2026 04:41
3555bfe to
f97a7d9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Windows: Create msi installers and a .NET bootstrapper on Release builds
Adds native Windows installers for Eto apps, like
LinuxPackageFormatson Linux andEnableDmgBuildon Mac. There's no WiX project or bootstrapper project to maintain, and no tools to install: the msi is written withmsi.dllandmakecab.exe, andSetup.exeis compiled with the .NET Frameworkcsc.exe. All three come with Windows.%LocalAppData%\Programsby default, with no admin prompt; setWindowsPackageScope=perMachinefor Program Files. If the .NET runtime the app needs is missing, it refuses to install and links to the download./quietorINSTALLFOLDER=....WindowsPackageRuntimeIdentifiers, defaulting to the build machine's). .NET Framework apps get one.WindowsPackageSelfContainedincludes .NET instead, so no bootstrapper is needed.WindowsSignCertificateFile/WindowsSignCertificatePassword,WindowsSignCertificateThumbprint, orWindowsSignCommand(e.g. Azure Trusted Signing), plusWindowsSignTimestampUrl. The app's exe and dll are signed before packaging, then the msi, then setup.All options are documented at the top of
src/Shared/build/WindowsPackage.targets. The targets ship in the Wpf, WinForms and Direct2D packages and are imported once. Eto.Test.Wpf now builds installers, and CI uploads them astest-win-packages.The upgrade code defaults to a GUID derived from the assembly name, so apps should set
WindowsPackageUpgradeCodebefore ever renaming the assembly.Tested on Windows 11 Arm64: per-user install, launch, upgrade (x64 over Arm64) and uninstall for net10.0 and net48;
Setup.exe /quietwith a custom install folder; runtime detection, including x64 runtimes on Arm64; and signing with a pfx, a thumbprint and a custom command. Not tested: a per-machine install, and the bootstrapper actually installing .NET, since both need an admin prompt.