OEM SetupComplete failing

BarryBurton

New Member
Hello all,

First, I want to express how great NTLite is. It's made imaging a breeze mostly and for the most part is easy to use. However, I'm running into a weird issue.

I made an image based on Windows 10 21H2. Everything works as expected, except that when I go to install this image on a new machine, sometimes the Post-Setup stuff does not run. For example, I have SQL Native Client and some other apps that are pre-installed. If I load my image in a VM it works as intended. If I load my image on real hardware, none of the pre-packaged software is installed. It seems to depend on the type of hardware. I can install my image on a Lenovo machine just fine, but Dell and HP will skip the Post-Setup installations.

Looking around on the forums the fix seems to be to enable OEM SetupComplete but when I do this installation fails with the message "Windows could not update the computer's boot configuration. Installation cannot proceed."

I am using Rufus with BIOS compatibility to write my ISO. Attached is a copy of my XML for the session. Any help is greatly appreciated!
 
IF you have been using NTlite for 'about 2 years' then you would know where your preset is. you would also know the difference between a preset and a autounattend.

BOTH are xml files. theres a hint, another one is 'autounattend.xml' for autounattend. thats the freebee
I know where the presets are supposed to be, they just aren't there pal! I'm not sure how else to explain it to you. Other images I've made have had many auto-presets and some I've saved on my own so I know this isn't normal behavior! And yes, 2 years on and off. I don't make images every day. I started with Win 7, then went through various Win 10 builds, never has this issue with presets come up.

Unless you've been deleting them, NTLite should be creating Auto-saved presets. Or Preset/Save As if you want to keep a particular one.
Except I'm not deleting anything. I extract a Win 10 ISO, I load an edition of Windows 10 Pro, make my changes, remove non-essential editions keeping Windows PE, and create an ISO. NTLite shows 1 auto-saved preset and my Test preset I created. In the past when I've used it, I've seen many auto-saved presets from making changes. Idk why all of a sudden its doing this. I'm running NTLite in a stock Win 10 VM in Hyper-V, not sure if that would have anything to do with it (it shouldn't!)

Sorry to have bothered anyone!
 
save your preset with custom name to custom place before pressing process then? its on toolbar visible to anyone. just look at them? search for them? I was using that on the first day i started using this software. how else you will create a decent ISO and save your config?

+you said you have been using it for 2 years. you should be in a position that you are even manually placing setupcompletes or oem folder or edit files by exploring mounted content 1 month old user can do this because everything is on this forum just use search bar.
 
Also OOBE cmd work before creating first user account means if anybody wants to merge registry then he must be sure to merge only machine based ie HKLM but not user based ie HKCU.
 
Okay, I figured out why my preset got janked up. I loaded my preset in Notepad++, made changes to remove some private info, and when I went to save it, it says I wasn't running as an admin and would need to restart to run as an admin. I said yes. When it reloaded the XML, a bunch of stuff was missing! I closed out, re-opened my preset in Notepad++ and my changes were saved and this time I can see everything.

I'm posting it here in case the issue is obvious and I just can't see it. I will be absorbing whatever knowledge I can from the forums to try and better understand why this is happening instead of burdening others. Thank you for the advice and help on this so far.
 

Attachments

  • TT Default.xml
    9.7 KB
Presets and every file saved by NTLite are owned by Administrator, because you don't want non-privileged users tampering with your image sources. Especially if you're in a shared work environment.

This preset looks normal. Back to the beginning, debug what are two separate problems.

- Errors copying Windows files are related to Setup (or Rufus) making assumptions because you've told it UEFI or MBR mode.
Don't mix & match. Since you're running Crystal Reports, it's a work environment and you can dictate boot mode. Otherwise you need two parallel ISO's (same Windows but targeted for different BIOS).

- OEMSetup should take care of itself.
 
Presets and every file saved by NTLite are owned by Administrator, because you don't want non-privileged users tampering with your image sources. Especially if you're in a shared work environment.

This preset looks normal. Back to the beginning, debug what are two separate problems.

- Errors copying Windows files are related to Setup (or Rufus) making assumptions because you've told it UEFI or MBR mode.
Don't mix & match. Since you're running Crystal Reports, it's a work environment and you can dictate boot mode. Otherwise you need two parallel ISO's (same Windows but targeted for different BIOS).

- OEMSetup should take care of itself.
Yep, all is good now!
 
Well, maybe not. Deployment from USB is fine, however, deployment over PXE with WDS is not. Using DISM I exported install.wim and boot.wim plus the unattend.xml from my image. I set up WDS to use my unattend.xml and load my wims. Setup goes through just fine, but after first reboot while it's at the Getting Ready state, it throws an error and then is stuck in a boot loop:

Code:
Windows could not parse or process the unattend answer file for pass [specialize]. The settings specified in the answer file cannot be applied. The error was detected while processing settings for component [Microsoft-Windows-Deployment].

Looking in my unattend.xml, I don't really see anything that should be tripping this up:

Code:
<settings pass="specialize">
        <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Order>1</Order>
                    <Path>%WINDIR%\Setup\Scripts\SetupComplete.cmd</Path>
                    <WillReboot>Never</WillReboot>
                </RunSynchronousCommand>
            </RunSynchronous>
        </component>
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <CopyProfile>false</CopyProfile>
        </component>
    </settings>

So, after some research I open registry when Windows fails to boot, and change the ChildCompletion/setup.exe key to a 3. Windows boots, the autounattend works, but the 3 pre-requisite programs aren't installed. I checked the C:\Windows\Panther folder for setuperr.log and saw this:

Code:
[SETUPUGC.EXE] Hit an error (hr = 0x80070002) while running [%WINDIR%\Setup\Scripts\SetupComplete.cmd]
[windeploy.exe] Setup.exe failed, returning exit code [0x1f]

Am I supposed to mount install.wim, add my files to %WINDIR%\Setup\Files and add my SetupComplete.cmd to that path above for this to work? Researching online shows a few solutions, one being that there can't be any empty settings defined, but that doesn't seem to be the case here.
 
WDS deploys install images, not ISO folders. Nothing else in sources (including $OEM$) gets copied over. NTLite's method won't work.

Change the specialize pass in unattend.xml, to mount a network share with your setup files.
Code:
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Order>1</Order>
                    <Path>net use Z: \\server\folder</Path>
                    <WillReboot>Never</WillReboot>
                </RunSynchronousCommand>
            </RunSynchronous>
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Order>2</Order>
                    <Path>start /wait Z:\CRRedist2005_X64.msi /passive</Path>
                    <WillReboot>Never</WillReboot>
                </RunSynchronousCommand>
            </RunSynchronous>
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Order>3</Order>
                    <Path>start /wait Z:\CRRedist2005_x86.msi /passive</Path>
                    <WillReboot>Never</WillReboot>
                </RunSynchronousCommand>
            </RunSynchronous>
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Order>4</Order>
                    <Path>start /wait Z:\sqlncli2005_x64.msi /passive</Path>
                    <WillReboot>Never</WillReboot>
                </RunSynchronousCommand>
            </RunSynchronous>
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Order>5</Order>
                    <Path>net use Z: /delete</Path>
                    <WillReboot>Never</WillReboot>
                </RunSynchronousCommand>
            </RunSynchronous>
 
Ah, I see now. That makes more sense! I thought I could mount the wim file with DISM and add these to C:\Windows\Panther\Files folder instead but a network share would be much better. Thanks again!
 
Back
Top