Windows 10 Pre-Upgrade Validation using SETUP.EXE
For those looking planning to do in-place upgrades to migrate from Windows 7, Windows 8, or Windows 8.1 to Windows 10 using System Center Configuration Manager task sequences (described here), you might be interested in doing a “trial run” with existing systems to identify machines that may have issues. To support this, SETUP.EXE includes a command line switch that tells it to “check for compatibility” but not actually perform the upgrade. The full command line would typically look something like this:
SETUP.EXE /Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable /Compat ScanOnly
It’s that last part, highlighted above, that does the trick. (You may or may not want to specify /DynamicUpdate Disable. Disabling it causes SETUP to not download the latest compatibility information from Windows Update, but it would be better if you could do this. That gets more interesting in ConfigMgr, but that’s a longer discussion.)
When you run this ScanOnly execution, the results are returned via return codes from SETUP.EXE itself. Here are the possible values:
- No issues found: 0xC1900210
- Compatibility issues found (hard block): 0xC1900208
- Migration choice (auto upgrade) not available (probably the wrong SKU or architecture)· 0xC1900204
- Does not meet system requirements for Windows 10: 0xC1900200
- Insufficient free disk space: 0xC190020E
(You’ll see these return codes as large negative numbers, but they are much easier to look at in hex.)
So all you have to do is deploy a simple ConfigMgr package or task sequence to all your devices, with the full Windows 10 source media. It’s probably not a good idea to use download and execute or download on demand with ConfigMgr in this case – make sure you run SETUP.EXE from the network. It’s rather unproductive to download the INSTALL.WIM when you aren’t actually going to use it. But it does have to be there, SETUP.EXE will complain if it isn’t.
Once you’ve run this, you can create a report that shows the devices with each of the statuses. The first obviously requires no further action, and the last has an obvious course of action (try to free up some more space). But for the others you’ll probably want to review the SETUPACT.LOG or SETUPERR.LOG generated by SETUP.EXE to see what the specific error was.
Comments
- Anonymous
August 26, 2015
Will this work with a stand-alone installation [no SCCM]? - Anonymous
September 02, 2015
None of those codes in Hex or converted appear in the setupact and setuperr logs... this is stand alone I am assuming you dont need SCCM - Anonymous
September 02, 2015
You have to capture and check the return code from SETUP.EXE. You don't need ConfigMgr or any special tool. For example, you could use "start /wait setup.exe /Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable /Compat ScanOnly" from a command prompt, and then "echo %errorlevel%" to see the return code. - Anonymous
September 07, 2015
Does this only work on certain editions? Just downloaded the VL version of Windows 10 Enterprise and each time nothing appears in the setuperr log and only 4 lines get created in the setupact log. Tried the echo %errorlevel% as you suggest and that returns 0. Normally I take this as success on an install but you mention we should be looking for something different. - Anonymous
September 07, 2015
It should work on any edition - certainly for Enterprise. Are you running SETUP.EXE from the main folder (not the sources folder)? - Anonymous
September 07, 2015
Yes, I have tried 3 methods so far. Mounting the ISO and running from there, creating a bootable USB device and running from there and copying the files locally drive and running from there. For the first 2 each time the command run was E:SETUP.EXE /Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable /Compat ScanOnly and on the last one it was C:Win10SETUP.EXE /Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable /Compat ScanOnly. - Anonymous
September 08, 2015
Can you e-mail me the log that you are seeing? (mniehaus@microsoft.com) - Anonymous
September 09, 2015
The comment has been removed - Anonymous
September 23, 2015
I'm getting a result of 1047526904, which according to Bing is 0x3E6FFDF8 in hex? I don't see that in your results list. - Anonymous
September 23, 2015
That's because the value is negative, not positive. -1047526904 = C1900208 in hex, which is the list above says that this was a hard block due to a compatibility issue. - Anonymous
September 23, 2015
Same on the previous error: -1047526896 is C1900210 in hex, so no issues found. - Anonymous
September 23, 2015
Jegadesh - Are you running Setup.exe on a VM? I am, and I am getting similar results. - Anonymous
September 23, 2015
Now that I use a better decimal to hex calculator I see that you are right. Thanks, Michael. - Anonymous
October 01, 2015
Michael, I am in the process of implementing this in our environment and I ran across an incompatibility that points to an application. The result is -1047526904 (0xC1900208 in hex), which you mention above is a compatibility issue. In the setupact.log file, I'm seeing a lot of 0xC1900208 with 0x4000C nearby, and according to this Microsoft link (http://windows.microsoft.com/en-us/windows-10/upgrade-install-errors-windows-10), it's an incompatible app that will prevent Windows 10 from upgrading. My question is, how do I figure out what the app is? The setupact and setuperr logs aren't showing the app as far as I can tell. Great post by the way. - Anonymous
October 01, 2015
The comment has been removed - Anonymous
November 18, 2015
How can i install windows 10in my mobile(microsoft lumia 535 ,os. Version 8.1).. - Anonymous
January 15, 2016
Look for the ScanResult.xml in the C:$windows.~btSourcesPanther folder. If the ScanResult.xml doesn't get created, look for the CompatData.xml's. It looks like the CompatData.xml files collectively make up the ScanResult.xml.
With my Compat ScanOnly task sequence, I wrote a script to parse these xml files and display the incompatibilities to the end user via vbs msgbox.- Anonymous
March 29, 2016
Adam,That would be very nice if you could share this script.
- Anonymous
- Anonymous
January 21, 2016
Is there a list of all possible return codes somewhere? /scanonly returns 0xC1900210, but when I got to upgrade I get 0xC190010E / -1047527154 . - Anonymous
January 21, 2016
How are you initiating the upgrade? The error means:
C190010e MOSETUP_E_EULA_ACCEPT_REQUIRED The installation process requires that the user accept the license agreement - Anonymous
January 21, 2016
Via WSUS. - Anonymous
January 21, 2016
I declined and reapproved it, was prompted for EULA and accepted. I'll retest again. - Anonymous
February 11, 2016
I have been testing in-place upgrade in my test environment on virtual machines. When I run /ScanOnly, I get 0xC1900210. But when I run Setup.exe (through TS) without /ScanOnly, I get 0xC1900204. I got the same error in TS Reports and in log file in Panther folder. I am trying to upgrade Win 7 x64 (en-US) using Win 10 x64 (en-US Evaluation). Please help. - Anonymous
February 12, 2016
The comment has been removed - Anonymous
February 23, 2016
The comment has been removed - Anonymous
March 01, 2016
Adam Johnson - Are you willing to share the script you wrote to parse the XML files? - Anonymous
March 01, 2016
Why can't they make it "friendlier" instead of the negative codes or hex?
Same goes for finding which app could block the upgrade.