Sign in to follow this  
Followers 0

Imagex Gui Vista Deployment tool Map/Capture/Apply

1 post in this topic

Posted

Imagex GUI

Intended for use within WinPE 2.0

Note: you have to have imagex.exe in the same folder.

Update 4-9-07:

  • Added Poll image function to display what images are available within a wim file.
  • Added Automatic Reboot functionality.
gimagex.ini

[CAPTURE]
Source=C:
Destination=MyWim.wim
Compression=Fast
Flags=Enterprise
Config=
Boot=0
Check=1
Name=My Vista Build Name
Description=My Vista Build Description
[APPLY]
Source=M:\Vista.wim
Destination=C:
Verify=0
Name=1
[MAP]
Letter=M:
Share=\\networkshare\folder
User=domain.com\TestUser

gimagex.exe

#include <Constants.au3>
#include <GUIConstants.au3>
#include <Array.au3>
#include <Process.au3>
#include <String.au3>
#include <GuiTreeView.au3>


Dim $avDriveMapAdd[7]
$avDriveMapAdd[0]   = "Unknown Error"
$avDriveMapAdd[1]   = "Undefined / Other error"
$avDriveMapAdd[2]   = "Access to the remote share was denied"
$avDriveMapAdd[3]   = "The device is already assigned"
$avDriveMapAdd[4]   = "Invalid device name"
$avDriveMapAdd[5]   = "Invalid remote share"
$avDriveMapAdd[6]   = "Invalid password"

Dim $avPing [5]
$avPing[0] = "Unknown Error"
$avPing[1] = "Host is offline"
$avPing[2] = "Host is unreachable"
$avPing[3] = "Bad destination"
$avPing[4] = "Other errors"

; Global Settings
;
Dim $gCaptureSource
Dim $gCaptureDestination
Dim $gCaptureCompression
Dim $gCaptureFlags
Dim $gCaptureConfig
Dim $gCaptureBoot
Dim $gCaptureCheck
Dim $gCaptureName
Dim $gCaptureDescription

Dim $gApplySource
Dim $gApplyDestination
Dim $gApplyVerify
Dim $gApplyName
Dim $imageinfo
Dim $gMapLetter
Dim $gMapUser
Dim $gMapPassword
Dim $gMapShare
Dim $sIni = @ScriptDir & "\gimagex.ini"
Dim $res
;
; Create the main GUI
;
GUICreate("GImageX - ImageX GUI Wrapper", 640, 380, -1, -1 )
$hTab = GUICtrlCreateTab(10, 10, 620, 355)
$BaseX = 20
$BaseY = 35


; Drive Map Tab

$hTab_0 = GUICtrlCreateTabItem(" Drive Map ")

$CurX = $BaseX
$CurY = $BaseY

$CurY = $CurY + 10
GuiCtrlCreateGroup("Drive Mapping", $CurX+10, $CurY, 580, 135)
$CurY = $CurY + 18

GUICtrlCreateLabel("Letter", $CurX+20, $CurY+3)
$hMapLetter = GUICtrlCreateCombo("F:", $CurX+85, $CurY, 100, 500, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, "G:|H:|I:|J:|K:|L:|M:|N:|O:|P:|Q:|R:|S:|T:|U:|V:|W:|X:|Y:|Z:")

$CurY = $CurY + 27
GUICtrlCreateLabel("UNC Path", $CurX+20, $CurY+3)
$hMapShareEdit = GUICtrlCreateInput("\\Server\Sharename", $CurX+85, $CurY, 300)

$CurY = $CurY + 27
GUICtrlCreateLabel("Username", $CurX+20, $CurY+3)
$hMapUserEdit = GUICtrlCreateInput("Domain.com\%Username%", $CurX+85, $CurY, 300)

$CurY = $CurY + 27
GUICtrlCreateLabel("Password", $CurX+20, $CurY+3)
$hMapPasswordEdit = GUICtrlCreateInput("Password", $CurX+85, $CurY, 300, -1, $ES_PASSWORD)



$hMapButtonGo = GUICtrlCreateButton("&Map!", $BaseX+500, $BaseY+290, 100)

; Capture Tab
;
$hTab_1 = GUICtrlCreateTabItem("  Capture  ")

$CurX = $BaseX
$CurY = $BaseY

; File Group
$CurY = $CurY + 10
GuiCtrlCreateGroup("WIM Image", $CurX+10, $CurY, 580, 155)
$CurY = $CurY + 18
GUICtrlCreateLabel("Source", $CurX+20, $CurY+3)
$hCaptureSourceEdit = GUICtrlCreateInput("C:", $CurX+85, $CurY, 300)
$hCaptureSourceBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY-2)

$CurY = $CurY + 27
GUICtrlCreateLabel("Destination", $CurX+20, $CurY+3)
$hCaptureDestEdit = GUICtrlCreateInput("MyWim.wim", $CurX+85, $CurY, 300)
$hCaptureDestBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY-2)

$CurY = $CurY + 27
GUICtrlCreateLabel("Compression", $CurX+20, $CurY+3)
$hCaptureCompression = GUICtrlCreateCombo("Maximum", $CurX+85, $CurY, 100, 500, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, "Fast")

$CurY = $CurY + 27
GUICtrlCreateLabel("Name", $CurX+20, $CurY+3)
$hCaptureNameEdit = GUICtrlCreateInput("My Vista Image", $CurX+85, $CurY, 300)

$CurY = $CurY + 27
GUICtrlCreateLabel("Description", $CurX+20, $CurY+3)
$hCaptureDescEdit = GUICtrlCreateInput("My Vista Image Description", $CurX+85, $CurY, 300)

; Options Group
$CurY = $CurY + 40
GuiCtrlCreateGroup("Options", $CurX+10, $CurY, 580, 100)
$CurY = $CurY + 18

GUICtrlCreateLabel("/config", $CurX+20, $CurY+3)
$hCaptureConfigEdit = GUICtrlCreateInput("", $CurX+85, $CurY, 300)
$hCaptureConfigBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY-2)

$CurY = $CurY + 27
GUICtrlCreateLabel("/flags", $CurX+20, $CurY+3)
$hCaptureFlagsEdit = GUICtrlCreateInput("Ultimate", $CurX+85, $CurY, 300)

$CurY = $CurY + 27
$hCaptureBootCheck = GUICtrlCreateCheckbox("/boot (WinPE Images Only) ", $CurX+20, $CurY)
$hCaptureCheckCheck = GUICtrlCreateCheckbox("/check", $CurX+190, $CurY)

$hCaptureButtonGo = GUICtrlCreateButton("&Capture!", $BaseX+500, $BaseY+290, 100)


;
; Apply Tab
;
$hTab_2 = GUICtrlCreateTabItem("  Apply  ")

$CurX = $BaseX
$CurY = $BaseY

; File Group
$CurY = $CurY + 10
GuiCtrlCreateGroup("WIM Image", $CurX+10, $CurY, 580, 205)
$CurY = $CurY + 18
GUICtrlCreateLabel("1. Source", $CurX+20, $CurY+3)
$hApplySourceEdit = GUICtrlCreateInput("MyWim.wim", $CurX+85, $CurY, 300)
$hApplySourceBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY-2)

$CurY = $CurY + 27
GUICtrlCreateLabel ("Input Image Number", $CurX+15, $CurY+30, 70, 30)
$hApplyName = GUICtrlCreateInput("1", $CurX+85, $CurY+30, 40, 20)
$hApplyNameBrowse= GUICtrlCreateButton("2. Poll Image Number", $CurX+15, $CurY+1)
$treeview = GUICtrlCreateTreeView ( 150, 90, 450, 120, BitOr($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$CurY = $CurY + 27
GUICtrlCreateLabel("Destination", $CurX+20, $CurY+103)
$hApplyDestEdit = GUICtrlCreateInput("C:", $CurX+85, $CurY+100, 300)
$hApplyDestBrowse = GUICtrlCreateButton("Browse", $CurX+395, $CurY+98)

; Options Group
$CurY = $CurY + 40
GuiCtrlCreateGroup("Options", $CurX+10, $CurY+100, 580, 50)
$CurY = $CurY + 18
Dim $hReboot = GUICtrlCreateCheckbox ( "Automatically Reboot", $CurX+20, $CurY+100, 130,15)
$hApplyVerifyCheck = GUICtrlCreateCheckbox("/verify", $CurX+150, $CurY+100, 100, 15 )
GUICtrlSetState ($hReboot, $GUI_CHECKED)
$hApplyButtonGo = GUICtrlCreateButton("&Apply!", $BaseX+500, $BaseY+290, 100)

;
; Set Default Options
;
LoadSettings()
SettingsToGUI()
;
; The GUI message loop
;
GuiSetState()
While 1
    $msg = GuiGetMsg()
    Select
        ; General Messages
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
            
            ; Capture Messages
        Case $msg = $hCaptureButtonGo
            DoCapture()
        Case $msg = $hCaptureSourceBrowse
            $sDir = BrowseForDirectory()
            if $sDir Then GUICtrlSetData($hCaptureSourceEdit, $sDir)
        Case $msg = $hCaptureDestBrowse
            $sFile = BrowseForWimToSave()
            if $sFile Then GUICtrlSetData($hCaptureDestEdit, $sFile)
        Case $msg = $hCaptureConfigBrowse
            $sFile = BrowseForConfig()
            If $sFile Then GUICtrlSetData($hCaptureConfigEdit, $sFile)

            ; Apply Messages
        Case $msg = $hApplyNameBrowse
            PollImage()
        Case $msg = $hApplyButtonGo
            DoApply()
        Case $msg = $hApplyDestBrowse
            $sDir = BrowseForDirectory()
            if $sDir Then GUICtrlSetData($hApplyDestEdit, $sDir)
        Case $msg = $hApplySourceBrowse
            $sFile = BrowseForWimToLoad()
            if $sFile Then GUICtrlSetData($hApplySourceEdit, $sFile)

            ; Drive Map Messages
        Case $msg = $hMapButtonGo
            DoMapping()

        Case Else
            ;;;
    EndSelect
WEnd

Exit


;
; FUNCTIONS
;

Func BrowseForDirectory()
    $sDir = FileSelectFolder("Select source folder", "C:")
    If StringRight($sDir, 1) = "\" Then $sDir = StringTrimRight($sDir, 1)
    Return $sDir
EndFunc


Func BrowseForWimToSave()
    $sFile = FileSaveDialog( "Select destination file", "C:\", "WIM Files (*.wim)", 3)
    If @error Then Return ""
    
    If StringRight($sFile, 4) <> ".wIM" Then $sFile = $sFile & ".wim"

    Return $sFile
EndFunc


Func BrowseForWimToLoad()
    $sFile = FileOpenDialog( "Select source file", "C:\", "WIM Files (*.wim)", 3)
    If @error Then Return ""

    Return $sFile
EndFunc


Func BrowseForConfig()
    $sFile = FileOpenDialog("Select config file", @ScriptDir, "INI files (*.ini)", 1)
    If @error Or StringRight($sFile, 4) <> ".ini" Then Return ""

    Return $sFile
EndFunc


Func DoCapture()
    $sCmd = '"' & @ScriptDir & '\imagex.exe"'
    
    If $gCaptureConfig <> "" Then $sCmd = $sCmd & ' /config "' & $gCaptureConfig & '"'
    
    If $gCaptureCompression = "fast" Then
        $sCmd = $sCmd & " /compress fast"
    Else
        $sCmd = $sCmd & " /compress maximum"
    EndIf
    
    If $gCaptureCheck = 1 Then $sCmd = $sCmd & " /check"
    If $gCaptureBoot = 1 Then $sCmd = $sCmd & " /boot"
    If $gCaptureFlags <> "" Then $sCmd = $sCmd & ' /flags "' & $gCaptureFlags & '"'
    
    $sCmd = $sCmd & ' /capture "' & $gCaptureSource & '" "' & $gCaptureDestination & '"'
    $sCmd = $sCmd & ' "' & $gCaptureName & '" "' & $gCaptureDescription & '"'
    
    $ret = RunWait($sCmd, @WorkingDir, @SW_SHOW)
    SplashTextOn ( "Return Code", "Imagex.exe returned with code = " & $ret, 400, 200, -1, -1, 32, "Tahoma", 16, 500)
    sleep (3000)
    SplashOff ()

EndFunc

Func PollImage ()
    Dim $nitem, $nitem
    Dim $imageinfo = " "
    $read = GUICtrlRead ($hApplySourceEdit)
    $sCmd = "imagex.exe"
    If $read = "" Then
        MsgBox (48, "Input required", "Please select the source")
    Else
        $sCmd = $sCmd & ' /info "' & $read & '"'
    EndIf
    ;MsgBox(0, "scmd", $sCmd)
    Dim $ret = Run(@ComSpec & " /c " & $sCmd & '"', @ScriptDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD )
    While 1
    $line = StdoutRead($ret)    
    If $line = "" Then  ExitLoop
    $imageinfo = $imageinfo & $line
    ;MsgBox(0, "RunDOS", $line)
    If @error Then ExitLoop
    WEnd
     _GUICtrlTreeViewDeleteAllItems ($treeview)
    $aImageInfo = _StringBetween ( $imageinfo, "<name>", "</name>" )
    $aImageDesc = _StringBetween ( $imageinfo, "<Description>", "</Description>" )
    $aImageFileCount = _StringBetween ( $imageinfo, "<Filecount>", "</Filecount>" )
    $aImageBuild = _StringBetween ( $imageinfo, "<Build>", "</Build>" ) 
    $imagenumber = UBound ($aImageInfo, 1)
    $x = 0
    Dim $nitem[$imagenumber]
    Do
    $nitem[$x] = GUICtrlCreateTreeViewItem ( "Image " & $x +1 & ": " & $aImageInfo[$x], $treeview )
    GUICtrlCreateTreeViewItem ( "Description: " & $aImageDesc [$x], $nitem[$x] )
    GUICtrlCreateTreeViewItem ( "File Count: " & $aImageFileCount [$x], $nitem[$x] )
    GUICtrlCreateTreeViewItem ( "Build Version: " & $aImageBuild [$x], $nitem[$x] ) 
    GUICtrlSetState($nitem[$x], $GUI_DEFBUTTON)
    $x = $x + 1
    Until $x = $imagenumber
EndFunc

Func DoApply()
    $sCmd = '"' & @ScriptDir & '\imagex.exe"'
    
    If $gApplyVerify = 1 Then $sCmd = $sCmd & " /verify"
    
    $sCmd = $sCmd & ' /apply "' & $gApplySource & '" "' & $gApplyName & '" "' & $gApplyDestination & '"'
    $ret = RunWait($sCmd, @WorkingDir, @SW_SHOW)
    SplashTextOn ( "Return Code", "Imagex.exe returned with code = " & $ret, 400, 200, -1, -1, 32, "Tahoma", 16, 500)
    sleep (3000)
    SplashOff ()
    $Rebootstate = GUICtrlRead ($hReboot)
    If $Rebootstate = 1 Then
    _RunDOS("Start wpeutil reboot")
    EndIf
EndFunc


Func DoMapping()
    $gMapLetter = IniRead($sIni, "MAP", "Letter", "V:")
    DriveMapDel($gMapLetter)
    $gMapShare = IniRead($sIni, "Map", "Share", "")
    $VistaAccount = GUICtrlRead ( $hMapUserEdit )
    $VistaPwd = GUICtrlRead ( $hMapPasswordEdit )
    $res = DriveMapAdd($gMapLetter, $gMapShare, 0, $VistaAccount, $VistaPwd)
    
    If $res Then
        ControlSetText("Mapping Drive", "", "Static1", "Drive successfully mapped!" )
        sleep (2000)
        ;MsgBox(64, "Drive Mapping", "Drive successfully mapped!")
    Else
        SplashOff()
        MsgBox(16, "Drive Mapping", "Error mapping drive! Code: " & $avDriveMapAdd[@error])
        
    EndIf   
EndFunc

Func LoadSettings()
    $sIni = @ScriptDir & "\gimagex.ini"
    
    $gCaptureSource = IniRead($sIni, "CAPTURE", "Source", "C:")
    $gCaptureDestination = IniRead($sIni, "CAPTURE", "Destination", "MyWim.wim")
    $gCaptureCompression = IniRead($sIni, "CAPTURE", "Compression", "Maximum")
    $gCaptureFlags = IniRead($sIni, "CAPTURE", "Flags", "Ultimate")
    $gCaptureConfig = IniRead($sIni, "CAPTURE", "Config", "")
    $gCaptureBoot = IniRead($sIni, "CAPTURE", "Boot", "0")
    $gCaptureCheck = IniRead($sIni, "CAPTURE", "Check", "1")
    $gCaptureName = IniRead($sIni, "CAPTURE", "Name", "My Vista Build Name")
    $gCaptureDescription = IniRead($sIni, "CAPTURE", "Description", "My Vista Build Description")

    $gApplySource = IniRead($sIni, "APPLY", "Source", "C:")
    $gApplyDestination = IniRead($sIni, "APPLY", "Destination", "MyWim.wim")
    $gApplyVerify = IniRead($sIni, "APPLY", "Verify", "0")
    $gApplyName = IniRead($sIni, "APPLY", "Name", "My Vista Build Name")

    $gMapLetter = IniRead($sIni, "MAP", "Letter", "M:")
    $gMapShare = IniRead($sIni, "MAP", "Share", "\\Server\Share")
    $gMapUser = IniRead($sIni, "MAP", "User", "User")

EndFunc


Func SettingsToGUI()

    ; CAPTURE
    GUICtrlSetData($hCaptureSourceEdit, $gCaptureSource)
    GUICtrlSetData($hCaptureDestEdit, $gCaptureDestination)
    GUICtrlSetData($hCaptureCompression, $gCaptureCompression)
    GUICtrlSetData($hCaptureFlagsEdit, $gCaptureFlags)
    GUICtrlSetData($hCaptureConfigEdit, $gCaptureConfig)
    If $gCaptureBoot = 1 Then
        GUICtrlSetState($hCaptureBootCheck, $GUI_CHECKED)
    Else
        GUICtrlSetState($hCaptureBootCheck, $GUI_UNCHECKED)
    EndIf
    If $gCaptureCheck = 1 Then
        GUICtrlSetState($hCaptureCheckCheck, $GUI_CHECKED)
    Else
        GUICtrlSetState($hCaptureCheckCheck, $GUI_UNCHECKED)
    EndIf
    GUICtrlSetData($hCaptureNameEdit, $gCaptureName)
    GUICtrlSetData($hCaptureDescEdit, $gCaptureDescription)
    
    ; APPLY
    GUICtrlSetData($hApplySourceEdit, $gApplySource)
    GUICtrlSetData($hApplyDestEdit, $gApplyDestination)
    If $gApplyVerify = 1 Then
        GUICtrlSetState($hApplyVerifyCheck, $GUI_CHECKED)
    Else
        GUICtrlSetState($hApplyVerifyCheck, $GUI_UNCHECKED)
    EndIf
    GUICtrlSetData($hApplyName, $gApplyName)

    ; MAP
    GUICtrlSetData($hMapLetter, $gMapLetter)
    GUICtrlSetData($hMapShareEdit, $gMapShare)
    GUICtrlSetData($hMapUserEdit, $gMapUser)
    GUICtrlSetData($hMapPasswordEdit, $gMapPassword)

EndFunc

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.