none
How can I run a custom program ASYNCHRONOUSLY when booting WinPE? RRS feed

  • Question

  • I have a custom application that I want to have running during WinPE for my Litetouch deployments. I had this working in SCCM and now I want to get it working in MDT.

    I have the Netcheck.exe application in my Extras folder, it ends up on the root of my X: drive.

    Here is my unattend.xml file.

    <?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
        <settings pass="windowsPE">
            <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
                <Display>
                    <ColorDepth>32</ColorDepth>
                    <HorizontalResolution>1024</HorizontalResolution>
                    <RefreshRate>60</RefreshRate>
                    <VerticalResolution>768</VerticalResolution>
                </Display>
    <RunAsynchronous>
    <RunAsynchronousCommand>
    <Order>1</Order>
    <Path>X:\NetCheck.exe</Path>
    <Description>Run the NetCheck app</Description>
    </RunAsynchronousCommand>
    <RunAsynchronousCommand>
    <Order>2</Order>
    <Path>wscript.exe X:\Deploy\Scripts\LiteTouch.wsf</Path>
    <Description>Lite Touch PE</Description>
    </RunAsynchronousCommand>
    </RunAsynchronous>
            </component>
        </settings>
        <cpi:offlineImage cpi:source="" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
    </unattend>

    By default, the Litetouch.wsf file is launched synchronously, and so my Netcheck app won't run until the Litetouch wizard closes (this won't work for my needs). Also, synchronous commands are run before Asynchronous commands.  Therefore, I need to run both my custom Netcheck app and the Litetouch wizard Asynchronously.

    However, every time I use the unattend file that I pasted above, WinPE boots and then immediately reboots. If I am quick and hit F8 I get a command prompt, and then my Netcheck app and the Litetouch wizard both run (sweet!), but then when I close that cmd prompt, WinPE shuts down (lame).

    The wpeinit.log is shown below. Everything seems to look good, so what is wrong? How can I accomplish this?

    2014-09-09 14:23:02.588, Info      WPEINIT is processing the unattend file [X:\unattend.xml]
    2014-09-09 14:23:02.588, Info      Spent 141ms initializing removable media before unattend search
    2014-09-09 14:23:02.604, Info      ==== Initializing Display Settings ====
    2014-09-09 14:23:02.620, Info      Setting display resolution 1024x768x32@60: 0x00000000
    2014-09-09 14:23:02.620, Info      STATUS: SUCCESS (0x00000000)
    2014-09-09 14:23:02.620, Info      ==== Initializing Computer Name ====
    2014-09-09 14:23:02.620, Info      Generating a random computer name
    2014-09-09 14:23:02.620, Info      No computer name specified, generating a random name.
    2014-09-09 14:23:02.620, Info      Renaming computer to MININT-9KBBIFF.
    2014-09-09 14:23:02.620, Info      Waiting on the profiling mutex handle
    2014-09-09 14:23:02.620, Info      Acquired profiling mutex
    2014-09-09 14:23:02.620, Info      Service winmgmt disable: 0x00000000
    2014-09-09 14:23:02.620, Info      Service winmgmt stop: 0x00000000
    2014-09-09 14:23:02.620, Info      Service winmgmt enable: 0x00000000
    2014-09-09 14:23:02.620, Info      Released profiling mutex
    2014-09-09 14:23:02.620, Info      STATUS: SUCCESS (0x00000000)
    2014-09-09 14:23:02.620, Info      ==== Initializing Virtual Memory Paging File ====
    2014-09-09 14:23:02.620, Info      No WinPE page file setting specified
    2014-09-09 14:23:02.635, Info      STATUS: SUCCESS (0x00000001)
    2014-09-09 14:23:02.635, Info      ==== Initializing Optional Components ====
    2014-09-09 14:23:02.635, Info      WinPE optional component 'Microsoft-WinPE-HTA' is present
    2014-09-09 14:23:02.651, Info      WinPE optional component 'Microsoft-WinPE-MDAC' is present
    2014-09-09 14:23:02.651, Info      WinPE optional component 'Microsoft-WinPE-WMI' is present
    2014-09-09 14:23:02.667, Info      WinPE optional component 'Microsoft-WinPE-WSH' is present
    2014-09-09 14:23:02.682, Info      STATUS: SUCCESS (0x00000000)
    2014-09-09 14:23:02.682, Info      ==== Initializing Network Access and Applying Configuration ====
    2014-09-09 14:23:02.682, Info      No EnableNetwork unattend setting was specified; the default action for this context is to enable networking support.
    2014-09-09 14:23:02.682, Info      Global handle for profiling mutex is non-null
    2014-09-09 14:23:02.682, Info      Waiting on the profiling mutex handle
    2014-09-09 14:23:02.682, Info      Acquired profiling mutex
    2014-09-09 14:23:02.997, Info      Install MS_MSCLIENT: 0x0004a020
    2014-09-09 14:23:02.997, Info      Install MS_NETBIOS: 0x0004a020
    2014-09-09 14:23:03.138, Info      Install MS_SMB: 0x0004a020
    2014-09-09 14:23:03.326, Info      Install MS_TCPIP6: 0x0004a020
    2014-09-09 14:23:03.702, Info      Install MS_TCPIP: 0x0004a020
    2014-09-09 14:23:03.702, Info      Service dhcp start: 0x00000000
    2014-09-09 14:23:03.702, Info      Service lmhosts start: 0x00000000
    2014-09-09 14:23:03.827, Info      Service ikeext start: 0x00000000
    2014-09-09 14:23:03.921, Info      Service mpssvc start: 0x00000000
    2014-09-09 14:23:03.921, Info      Service mrxsmb10 start: 0x00000000
    2014-09-09 14:23:03.921, Info      Released profiling mutex
    2014-09-09 14:23:03.921, Info      Spent 1250ms installing network components
    2014-09-09 14:23:04.108, Info      Installing device root\kdnic X:\windows\INF\kdnic.inf succeeded
    2014-09-09 14:23:04.608, Info      Installing device vmbus\{f8615163-df3e-46c5-913f-f2d2f965ed0e} X:\windows\INF\wnetvsc.inf succeeded
    2014-09-09 14:23:04.670, Info      Spent 750ms installing network drivers
    2014-09-09 14:23:09.768, Info      QueryAdapterStatus: found operational adapter with DHCP address assigned.
    2014-09-09 14:23:09.768, Info      Spent 5062ms confirming network initialization; status 0x00000000
    2014-09-09 14:23:09.768, Info      STATUS: SUCCESS (0x00000000)
    2014-09-09 14:23:09.768, Info      ==== Applying Firewall Settings ====
    2014-09-09 14:23:09.768, Info      STATUS: SUCCESS (0x00000001)
    2014-09-09 14:23:09.768, Info      ==== Executing Synchronous User-Provided Commands ====
    2014-09-09 14:23:09.768, Info      STATUS: SUCCESS (0x00000001)
    2014-09-09 14:23:09.768, Info      ==== Executing Asynchronous User-Provided Commands ====
    2014-09-09 14:23:09.768, Info      Parsing RunAsynchronousCommand: 2 entries
    2014-09-09 14:23:09.768, Info        Command 0: 0x00000000
    2014-09-09 14:23:09.768, Info      Successfully executed command 'X:\NetCheck.exe'
    2014-09-09 14:23:09.768, Info        Command 1: 0x00000000
    2014-09-09 14:23:09.784, Info      Successfully executed command 'wscript.exe X:\Deploy\Scripts\LiteTouch.wsf'
    2014-09-09 14:23:09.784, Info      STATUS: SUCCESS (0x00000000)
    2014-09-09 14:23:09.784, Info      ==== Applying Shutdown Settings ====
    2014-09-09 14:23:09.784, Info      No shutdown setting was specified
    2014-09-09 14:23:09.784, Info      STATUS: SUCCESS (0x00000001)

    Tuesday, September 9, 2014 9:25 PM

Answers

  • Here is how i ended up solving my problem.

    Change the unattend file to look like this:

    <?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
        <settings pass="windowsPE">
            <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
                <Display>
                    <ColorDepth>32</ColorDepth>
                    <HorizontalResolution>1024</HorizontalResolution>
                    <RefreshRate>60</RefreshRate>
                    <VerticalResolution>768</VerticalResolution>
                </Display>
    			<RunSynchronous>
    				<RunSynchronousCommand>
    					<Order>1</Order>
    					<Path>wscript.exe X:\Deploy.vbs</Path>
    					<Description>Run the .vbs file that kicks off Netcheck and the Litetouch wizard</Description>
    				</RunSynchronousCommand>
    			</RunSynchronous>
            </component>
        </settings>
        <cpi:offlineImage cpi:source="" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
    </unattend>
    

    Here is the Deploy.vbs:

    Set objShell = Wscript.CreateObject("Wscript.shell")
    objShell.Run "X:\Netcheck.exe", 0, false
    objShell.Run "wscript.exe X:\Deploy\Scripts\LiteTouch.wsf", 0, true

    • Marked as answer by David Bloomer Wednesday, September 10, 2014 9:06 PM
    Wednesday, September 10, 2014 9:06 PM

All replies

  • So after looking at logs from a stock MDT unattend.xml file and my own custom unattend.xml file, it looks what is simply happening is that in the STOCK MDT boot, the Litetouch wizard is run Synchronously, and so WPEINIT.EXE executes the Litetouch.wsf file and waits for it to exit.

    With my unattend.xml file, I run both commands Asynchronously, and so WPEINIT.EXE simply launches both of them, does NOT wait for them to exit, and then shuts down. It is working as designed.

    So, it appears that in order to get the functionality i want, I need to write a .cmd file that will launch both the Netcheck.exe and the LiteTouch.wsf file, but run that .cmd file synchronously.

    Tuesday, September 9, 2014 10:17 PM
  • Here is how i ended up solving my problem.

    Change the unattend file to look like this:

    <?xml version="1.0" encoding="utf-8"?>
    <unattend xmlns="urn:schemas-microsoft-com:unattend">
        <settings pass="windowsPE">
            <component name="Microsoft-Windows-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
                <Display>
                    <ColorDepth>32</ColorDepth>
                    <HorizontalResolution>1024</HorizontalResolution>
                    <RefreshRate>60</RefreshRate>
                    <VerticalResolution>768</VerticalResolution>
                </Display>
    			<RunSynchronous>
    				<RunSynchronousCommand>
    					<Order>1</Order>
    					<Path>wscript.exe X:\Deploy.vbs</Path>
    					<Description>Run the .vbs file that kicks off Netcheck and the Litetouch wizard</Description>
    				</RunSynchronousCommand>
    			</RunSynchronous>
            </component>
        </settings>
        <cpi:offlineImage cpi:source="" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
    </unattend>
    

    Here is the Deploy.vbs:

    Set objShell = Wscript.CreateObject("Wscript.shell")
    objShell.Run "X:\Netcheck.exe", 0, false
    objShell.Run "wscript.exe X:\Deploy\Scripts\LiteTouch.wsf", 0, true

    • Marked as answer by David Bloomer Wednesday, September 10, 2014 9:06 PM
    Wednesday, September 10, 2014 9:06 PM