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 (27)
  1. Ed says:

    Will this work with a stand-alone installation [no SCCM]?

  2. GS says:

    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

  3. 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.

  4. Darren Thorley says:

    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.

  5. It should work on any edition – certainly for Enterprise. Are you running SETUP.EXE from the main folder (not the sources folder)?

  6. Darren Thorley says:

    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.

  7. Can you e-mail me the log that you are seeing? (

  8. Jegadesh says:

    I get different error code which is not listed above. This is what i did

    1.Copy Win 10 Enterprise media to local machine
    2.Launch command prompt as Admin
    3.Execute start /Wait SETUP.EXE /Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable /Compat ScanOnly
    4.echo %errorlevel%
    Hex eq -0x3E6FFDF0

    Looked around in Google and Bing and could not find any result. Any idea? Thanks

  9. David Bloom says:

    I’m getting a result of 1047526904, which according to Bing is 0x3E6FFDF8 in hex? I don’t see that in your results list.

  10. 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.

  11. Same on the previous error: -1047526896 is C1900210 in hex, so no issues found.

  12. David Bloom says:

    Jegadesh – Are you running Setup.exe on a VM? I am, and I am getting similar results.

  13. David Bloom says:

    Now that I use a better decimal to hex calculator I see that you are right. Thanks, Michael.

  14. Joe Sciulli says:

    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 (,
    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.

  15. There are XML files in the C:$windows.~btSourcesPanther folder that contain the details on the app that has issues – it will take a little hunting to find it.

  16. kumar tejas says:

    How can i install windows 10in my mobile(microsoft lumia 535 ,os. Version 8.1)..

  17. Adam Johnson says:

    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.

    1. David Bloom says:


      That would be very nice if you could share this script.

  18. Jeff Borders says:

    Is there a list of all possible return codes somewhere? /scanonly returns 0xC1900210, but when I got to upgrade I get 0xC190010E / -1047527154 .

  19. 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

  20. Jeff Borders says:

    I declined and reapproved it, was prompted for EULA and accepted. I’ll retest again.

  21. Nipun Garg says:

    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.

  22. Nipun Garg says:

    It was failing due to Antivirus. I removed it from machine and executed Task Sequence (with /Auto Clean). It worked fine. Now Testing on another machine (with /Auto Upgrade). Removed AV but it still failed with same error. Checking if issue caused by some
    other application (Java, Office etc). Isn’t there any way to check or directly get the problematic Application Name or Language Pack info or something explicit, instead of error codes (0xC1900204)? This is really annoying to keep on running TS to get same
    error code but no solid information.

  23. Michele.T says:

    Hi, it seems that setup.exe returns zero instead of 0x3 (documented here: when it is launched to really do the upgrade. Instead I get expected return code when trying validation with /Compat ScanOnly switch. Here what I do in case of real upgrade:

    1.Copy Win 10 Enterprise media to local machine
    2.Launch command prompt as Admin
    3.Execute start /Wait SETUP.EXE /Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable

    4.echo %errorlevel%
    5. 0

    Am I wrong in anything on my side?
    Thanks in advance for any help

  24. Erik S. says:

    Adam Johnson – Are you willing to share the script you wrote to parse the XML files?

  25. Ed says:

    Why can’t they make it "friendlier" instead of the negative codes or hex?
    Same goes for finding which app could block the upgrade.

Comments are closed.

Skip to main content