This page says what WinAppMigrator needs, and, honestly, how far its testing goes. The testing part follows the README's own list, What it has been tried on.
| Need | The app (old PC) | An installer (new PC) |
|---|---|---|
| Windows | Windows 10 or 11 is what it is for. The drive or image it reads can have Windows 7, Vista, 8, or 8.1. | Windows 10 or 11 |
| Processor | x64, or Windows 11 on Arm through emulation. Not 32-bit Windows, and not Windows 10 on Arm, which cannot run x64 programs. | The same. The installer refuses an app whose programs cannot run on that PC. |
| Administrator rights | Always. It asks when it starts. | Always. It asks when it starts. |
| Direct3D 12 | For its window. It has no other way to run. | For its window. Without it, use the command line. |
| Internet | Optional. Used to download runtimes to put inside the installer. | Not needed for runtimes inside the installer. Needed for a runtime installed with winget, for the DirectX End-User Runtime, and maybe for .NET Framework 3.5. |
| Room | For the installer and the build's working files. The screen says how much. | For the unpacked package and the app. The window says how much. |
Reading an old PC over the network needs WinAppMigrator Client running there. It needs Windows 7, 8, 10, or 11, 32-bit or 64-bit, administrator rights, which it asks for, and the same local network as the PC the app runs on. It needs no internet. See Moving from a PC over the network.
Windows 10 and 11 are what WinAppMigrator is for. But the tests on GitHub's machines run on Windows Server 2022, Windows Server 2025, and Windows 11 on Arm. Neither desktop Windows 10 nor desktop Windows 11 on an x64 PC has been run there.
One thing differs on older Windows: a file named like a device, such as aux.h, cannot be installed before Windows 11, because older Windows opens that name as the device. An installer holding one stops and says so, before installing anything. This was run on Windows Server 2022, build 20348, where it is refused, and on builds 26100 and 26200, where the file installs. Windows 10 itself has not been run. WinAppMigrator assumes the change came with build 22000, the first Windows 11.
An installer also compares the Windows it runs on with the one the app came from. If the new PC's Windows is older, it says so in the list before you install: the app's programs may start, and still rely on something the older Windows does not have.
The PC an app comes from can have an older Windows than 10. A drive or an image from Windows 7, Vista, 8, or 8.1 is read as such, and so is a PC with Windows 7 or later read over the network. Installers built from them are made for Windows 10 and 11. The app itself still runs only on Windows 10 or 11. See Apps from Windows 7, Vista, 8, or 8.1.
The app and the installers are x64 programs. On an Arm PC, Windows runs them through emulation. An installer checks what each of the app's programs is built for:
- an x64 app on an Arm PC is listed as running through an emulator, which most programs are fine with;
- installers do not start on 32-bit Windows at all, so nothing is installed there;
- a driver built for another processor is refused, since a driver has to match exactly.
Every push to the project's main branch, and every pull request, runs a set of tests on GitHub's own machines, called runners. They are thrown away afterward, so the tests are free to change them. The full list is in CI jobs.
Five real open-source apps are moved between machines on every push: 7-Zip, PuTTY, Eclipse Mosquitto, windows_exporter, and Git LFS. They are installed by their publishers' own setups, which between them are a custom one, MSI, NSIS, and Inno Setup. The installers built from them go to fresh machines on Windows Server 2022, Windows Server 2025, and Windows 11 on Arm, both where each app was and in a folder of another name. Then Windows is asked to really use what was restored:
- an archive is made and unpacked;
- a COM class is started;
- a file type is opened;
- a shortcut is started;
- a service started by the install answers a real client.
Each check is first shown to fail without the app. After an uninstall, the registry values, services, tasks, firewall rules, and folders it compares are as they were.
Fake apps are also built, installed, and taken back out in three ways: by an uninstall, by a failure late in an install, and by killing an installer part-way.
Those are small, well-behaved apps on clean machines. This is how far that goes:
| Area | What has been run | What has not |
|---|---|---|
| Which Windows | Windows Server 2022 and 2025 on x64, and Windows 11 on Arm through emulation | Desktop Windows 10, and desktop Windows 11 on x64. Only by hand have installers been run on Windows 11 25H2: see below. |
| A drive from another PC | A virtual drive (VHD) built on the test machine, made to look like another PC's, including hostile on purpose | A real drive from another PC |
| A disk image | Nothing on GitHub's machines. By hand, .vhdx images of Windows 7 virtual machines: see below. |
Any image on GitHub's machines. A .vhd, and an image made by Disk2vhd or by Windows 7's own backup. |
| Windows 7, Vista, 8, and 8.1 | Nothing on GitHub's machines. By hand, Windows 7 SP1, 32-bit and 64-bit: see below. | Any of it on GitHub's machines. A real Windows 7 PC, rather than a virtual machine. Vista, 8, and 8.1. |
| Another PC over the network | On GitHub's machines, only the app paired with the client's own code on one machine. By hand, the client on Windows 7 SP1 virtual machines and on Windows 11 25H2: see below. | Windows 8 and 10 as the old PC. A real network between two separate PCs. |
| Runtimes | The x64 Visual C++ 2015 and later, installed for real, on a machine it was first taken off. Every other runtime is downloaded and checked as Microsoft's. | Installing any other runtime. The winget route and the Windows feature route. |
| Real windows | The app, an installer, and an uninstaller opened on test machines that use a software renderer and a 1024x768 screen. Clicking through the screens is only done with no real window. | A real graphics card, display scaling, and more than one monitor |
| Uninstalling | The quiet command an entry in Settings records, QuietUninstallString. The windowed uninstaller is only opened. |
Clicking Uninstall in Settings, or in the uninstaller's window |
| Signing | 0.5.0 is the first release whose app is signed, and 0.6.0 the first whose client is, run on Windows 7 SP1 with none of its later updates. A certificate of your own on an installer, only with a throwaway test certificate. | The UAC prompt for the signed client on Windows 7. A real certificate of your own on an installer. |
| Anything at all | An app with online activation, a driver being loaded, an app the size of an office suite, an app's own updater after a move, and a restart afterward |
So try an installer before you rely on it. Install it on a spare PC, or a virtual machine with Direct3D 12, and check the app works, before you wipe the old PC.
This was run by hand, away from GitHub's machines, and is not repeated on every push.
Two Windows 7 SP1 virtual machines, one 32-bit and one 64-bit, had 7-Zip 9.20, Notepad++, VLC 2.2.8, and two small test apps of the Windows XP era installed. One test app, LegacyNotes, keeps its settings beside itself, so Windows 7 kept them in its VirtualStore. The other, RetroBlocks, uses DirectX 9. Each machine's disk was exported as a .vhdx, read with the code behind Disk Image…, and built into installers that passed their checks.
LegacyNotes, RetroBlocks, and Notepad++ were installed on Windows 11 25H2, run as a person would, and uninstalled. Each started with what it had on Windows 7. 7-Zip and VLC were built but not installed, as that PC has newer ones. See Apps from Windows 7, Vista, 8, or 8.1.
This was also run by hand, away from GitHub's machines.
WinAppMigrator Client was run on the same Windows 7 virtual machines, 32-bit and 64-bit, and on Windows 11 25H2. All five apps were built over the network from the 64-bit machine, each in a few seconds, with the same files and settings as from its disk image. LegacyNotes, RetroBlocks, and Notepad++ from those installers were installed and run on Windows 11, as above. The client was also run on Windows 7, 32-bit and 64-bit, with Windows' own DLLs planted beside it: none were loaded into it, before it copied itself to a folder only an administrator can change or after, through pairing and a whole build.
Windows 8 and 10 as the old PC have not been run, and neither has a real network between two PCs: the virtual machines were on a network of their own, inside the PC that built. The signed client was run on Windows 7 SP1 virtual machines, 32-bit and 64-bit, with none of its later updates. It worked, and Windows read its signature as untrusted, because they lacked Microsoft's 2020 root certificate. With that root added, the 64-bit one read it as valid. See Moving from a PC over the network.
- A volume mounted on a folder, rather than given a drive letter, is allowed as an install location if Windows gives that folder as where it is. That has not been run on a real one. If it is refused, use its drive letter.
- Reading a registry file that a plain read is refused, in Windows' backup mode, has only been run in tests that do not refuse a real one.
- Some of the protections against other programs on the same PC are reasoned from what each place lets a program do, and not raced by a test. See Privacy and security.
Last changed 2026-11-11. Describes WinAppMigrator as of its latest release, 0.6.0.