WinAppMigrator

What Goes in an Installer

An installer holds what the app needs to work on the new PC, and as little else as possible. This page lists each kind of thing, how it is found, how the two options change it, and what is always left out.

How Things Are Found

The app uses three kinds of evidence, in this order of trust:

  1. What the app's setup recorded. Most setups leave a record of what they installed: MSI keeps a database, Inno Setup keeps a log, and NSIS sometimes does. Where there is a record, the app reads it.
  2. What points at the app's files. A service, a file type, a firewall rule, or a shortcut belongs to the app if what it runs or opens is one of the app's files. Its name says nothing.
  3. Exact names. Folders and registry keys named exactly for the app, such as C:\ProgramData\Fabrikam Data Sync or Software\Fabrikam\Data Sync. A name that only contains the app's name does not count, so Git never takes GitHub.

What is close to a name, but not exact, is offered for you to tick, under Might Also Be Part of It. See Near matches.

Each Kind of Thing

What Goes in? Notes
Program Files Yes, unless you untick a folder Found through install records, App Paths, and folders named exactly for the app. What holds the main program, and what it cannot start without, always goes in. Empty folders come along too, up to 10,000.
Registry settings Yes The app's own machine-wide keys. With User Data off, an account's own keys go only where Windows itself looks for an app, plus a value saying where the app is.
Services Yes, unless you untick one With their arguments, settings, and built-in account. One set to start by itself is started after the install has checked its files. A custom account's password cannot be moved, so that service is set up as LocalService, and the installer says so.
Drivers Yes, unless you untick one Only drivers the app owns, which are registered again on the new PC. No test has loaded one. Drivers that belong to Windows or another company are named instead, for you to reinstall from their maker.
Scheduled Tasks Yes, unless you untick one A task that ran as a person runs as whoever installs it. With User Data off, one told to work on something in someone's folders stays behind.
Startup items Yes, unless you untick one Run values and Startup folder shortcuts that run the app's own programs
Shortcuts Yes, unless you untick one They go to the Desktop and Start menu of the new PC. With User Data off, a shortcut in your own folders goes only if it just opens the app.
Environment variables Yes, unless you untick that kind Only those that hold the app's path. A captured Path holds only the app's entries, and is added to the new PC's, never put in place of it.
COM classes Yes, unless you untick that kind With their type libraries, interfaces, and AppIDs, when their program is one of the app's files
File types and link types Yes, unless you untick that kind When what opens them is the app. On a type that is someone else's, only the app's own menu commands go.
Menu commands and shell extensions Yes, unless you untick that kind When what they run or load is one of the app's files
Default apps entries Yes, unless you untick that kind So you can choose the app in Default apps. Nothing is made the default by it.
Firewall rules Yes, unless you untick that kind Only for a program of the app's, one program per rule
Fonts Yes, unless you untick that kind Only a font file of the app's. One in C:\Windows\Fonts comes only if a machine-wide install record names it, and it goes in the install folder, not Windows' folder.
ODBC drivers and data sources Yes, unless you untick that kind A driver whose files are the app's. A data source that uses one of those, or has the app's exact name. Its password is left out.
Event log sources Yes, unless you untick that kind When its messages come from the app's files
Compatibility settings Yes, unless you untick that kind Settings Windows applies when starting one of the app's programs
Runtimes Always Read from the main program and up to 64 others, nearest the top of its folder first. If there are more, the screen says how many were not looked at. Visual C++ 2005 and later, and .NET 6 to 10, go inside the installer if they can be downloaded when you build. See Runtimes.
License data Only with License and Activation Data on License files and stores, and license values in your account's part of the registry. A license value in the machine-wide registry or under the publisher's own key, and a store tied to the hardware, is only named, even with the option on. With the option off, none of it is captured. Only the names are noted.
User Data Only with User Data on See below.
Certificates Never The ones the app seems to rely on are named. Whether to trust one is for you to decide.
Credentials Never Values and files whose names, or a few shapes of text, say they are passwords, tokens, or private keys are left out and named. They cannot be ticked. One kept under a plain name, or inside an app's own files, is not recognised.
Near matches Only if you tick them Up to 200 are offered. Once ticked, each goes through the same checks as everything else.
The app's entry in Settings Yes, changed It goes with this project's uninstaller in place of the old one. What was only true on the old PC is dropped.

User Data

With User Data on, these come along, for one account:

Files that OneDrive keeps online only are listed but not copied, so a build never downloads them, or fails on them. To bring them, make them available offline in OneDrive before you build. Folders of temporary files, caches, crash dumps, and logs inside data folders are skipped too.

An installer holds one account's data. If more than one account has data for the app, you choose whose with Whose Data. On the new PC it goes to whoever is signed in.

How the Options Change What Goes In

With User Data Off

This is the default. Beyond leaving out the data folders above:

So the app should start on the new PC much as it would for someone new, except for what it keeps among its own program files and machine-wide settings, which go as they are.

With License and Activation Data Off

This is the default. License files, license values, license stores, and license settings of services, command lines, and variables are not captured at all. A serial number typed into the app's setup counts as license data too. Only their names are noted, under Left Out, and Why, and in the installer.

With it on, license files and stores go in, and so do license values in your account's part of the registry. A license value in the machine-wide registry, such as a serial number a setup saved for everyone, is only named, so have it ready to enter again. Credentials still do not go in. A license in a folder you unticked still goes in, because licenses follow this option only. The screen says so.

WinAppMigrator never decrypts license data and never gets around activation. A license tied to the old PC may need activating again. See Privacy and security.

What Is Always Left Out

What Why
Anything that looks like a credential Passwords, tokens, keys, and files such as .env, id_rsa, credentials.json, *.pfx, *.kdbx, *.ovpn, or a .pem holding a private key. They are named, never captured. You may have to enter them again on the new PC.
Certificates They are named. Adding one to a trust store is a decision for you.
Drivers that belong to Windows or another company They cannot be passed on. Reinstall them from their maker.
Another account's data An installer holds one account's data. Another account's folders are left out, however a setting came to name them.
What is on a network share Looking at a share would connect to it with your account. A Documents folder kept on a share is left out, with a warning.
What is through a link in the app's folder, or more than 64 folders deep Each is named in a warning. What the link points at stays behind.
Registry past a limit 1 MiB for one value, 512 keys and 8 levels under one key, and 100,000 values for an app. Reaching one is a warning.
A firewall rule with a TTK condition, or with two programs Carried over, it could let in more on the new PC, or read as another program's.
An ODBC data source that uses Windows' own driver, unless it has the app's exact name Nothing else says whose it is.
A driver file with no service that loads it It is named, and stays.
How the app's own setup would remove it Its old uninstall command, its Inno Setup log unins000.dat, where an MSI setup was run from, and who it was registered to. None of that would work, or be true, on the new PC.
Microsoft Store apps They are not listed at all.

What the Installer Refuses

An installer runs with full rights, and nothing proves who built a package, so the installer checks everything a package asks for when it installs, not only when it was built. It refuses, and lists:

What it refuses is left out, and the rest of the install goes ahead. But if something the package sets up would rely on a refused file, the installer installs nothing rather than have that run whatever is already there.

A list of what is dangerous can never be complete. So any registry values outside the app's own keys, and outside the kinds listed above, are shown as one row of their own, Other Settings, "N settings outside the app's own keys", for a second look. What counts as the app's own goes by the name, publisher, and folder the package gives itself, so a package that calls itself another company can write that company's keys without this row showing them. What is under Software\Classes is not counted here either. See Installing on the new PC.

The full rules are in SECURITY.md. How things are found is in docs/discovery.md.

What It Can Miss

More are in Limitations.

Last changed 2026-11-11. Describes WinAppMigrator as of its latest release, 0.6.0.