VMware Communities
JerriM
Contributor
Contributor
Jump to solution

Workstation 7.1 - using 'nogui' option to start VM - having problems

Hi,

I am currently running some automated install tests and am finding that any processes that are supposed to start after the install has finished won't start.

I am installing product X on a Win7 64-bit virtual machine which has been started by an automated script utilizing vmrun....start with nogui option.

After product X has finished installing, fileX.exe is supposed to run and start process fileX and launch a toolbar on the virtual machine.  This isn't happening.

Does 'nogui' also affect this toolbar from launching?

Any insight is greatly appreciated Smiley Happy

Thanks

0 Kudos
1 Solution

Accepted Solutions
admin
Immortal
Immortal
Jump to solution

Hi JerriM,

I took a quick look through your script, but I do not know Robot Frameworks.

Let me give you some quick description of some the vmrun options that might help.

For vmrun start-

nogui: This should not affect what happens within the virtual machine. All it does is determine whether the virtual machine, when it powers on, does so within the VMware Workstation UI, or if it runs in the background on the host.

For vmrun runProgramInGuest-

interactive: I think this is where the problem is. When you run a program using vmrun, by default it is started by a Windows service running inside the guest. On Windows Vista and later, services do not have access to any user desktop environment. They exist in some hidden desktop. So, any UI start by these applications will never be visible to the user. If you need to start a program that must be interacted with directly (via the guest's console/display) then you should use the "-interactive" option. However, this does require that the user account must be logged into the Windows desktop (such as via the log in screen when Windows boots up); the simplest way is to enable auto-login, so the account automatically logs in.

noWait: This makes vmrun exit as soon at the program in the guest starts, instead of waiting for it to exit.

activeWindow: This makes the program run in the guest, if it is a UI, start with a non-minimized window.

Let me know if this helps.

View solution in original post

0 Kudos
5 Replies
continuum
Immortal
Immortal
Jump to solution

post your scripts so that we can inspect them


________________________________________________
Do you need support with a VMFS recovery problem ? - send a message via skype "sanbarrow"
I do not support Workstation 16 at this time ...

0 Kudos
JerriM
Contributor
Contributor
Jump to solution

I'm using Robot Framework to launch and start the vm from python based keywords.  Here goes....  I hope someone knows Robot Frameworks Smiley Happy

----- Here is the python runner (vmrun.py):

START Python

#!/usr/bin/python
# Control Vmware from Python. Used the vmrun.exe

# @author : Binjo <binjo.cn@gmail.com>
# @date   : 2008/03/15
#
# This is a python wrapper of vmrun.exe, which is used to control Vmware
# Based on vmrun-ruby, Alexander Sotirov <asotirov@determina.com>
# Currently only supports vmware 6.0 or higher version
#
#    USAGE
# import vmrun
# vm = vmrun.Vmrun( r'full\path\to\your\foo.vmx', 'username', 'pass' )
# vm.start()
# vm.suspend()
# vm.stop()
#
#    KNOWN ISSUE
#
# When call revertToSnapshot, it may mess the vmware's vmx file, the Vmware may refuse
#   to start. If this is the case, edit your vmx file, remove the following line:
#       checkpoint.vmState = "foo-SnapshotXX.vmsn"
#   edit vmx file:
#       ide0:0.fileName = "foo-XXXXX.vmdk"
#   to the original disk file
#       ide0:0.fileName = "foo.vmdk"
#
# NOTE from Jerri:  I have NOT seen this issue occur on VMware Workstation 7
#

import os
import subprocess

class Vmrun:

    # TODO
    VMRUN_VERSION       =   '0.1.3'

    def execute( self, path, *cmd 😞

        cmds   = list(cmd)
        cmds.insert( 1, "\"%s\"" % self.VM_FILE )
        cmds[0] = "-T ws -gu %s -gp %s %s" % (self.VM_ADMIN, self.VM_PASS, cmds[0])
        params = " ".join( cmds )

        if self.DEBUG: print "[DEBUG] %s" % params

#        st = subprocess.STARTUPINFO()
        p = subprocess.Popen( "%s %s" % (path, params), stdout=subprocess.PIPE )#, startupinfo=st, creationflags=0x10 )
       
        result = p.stdout.readlines()
        
        if len(result) != 0 and result[0] != "The file exists.\r\n":
         print "FAILURE DUE TO: ", result
         raise BaseException(result)

        return p.stdout.readlines()

    def vmrun(self, *cmd):
        output = self.execute( self.VMRUN_PATH, *cmd )

        return output

    # TODO maintain vm's power state
    def __init__( self, vmx, user='', password='', vmrun='', debug=False 😞

        self.VM_FILE    =   vmx         # TODO strict censor?
        self.VM_ADMIN   =   user
        self.VM_PASS    =   password
        self.DEBUG      =   debug

        if vmrun != '':
            self.VMRUN_PATH = vmrun
        else:
            # get vmrun.exe's full path via registry
            import _winreg
            reg = _winreg.ConnectRegistry( None, _winreg.HKEY_LOCAL_MACHINE )
            try:
                rh = _winreg.OpenKey( reg, r'SOFTWARE\VMware, Inc.\VMware Workstation' )
                try:
                    vw_dir = _winreg.QueryValueEx( rh, 'InstallPath' )[0]
                finally:
                    _winreg.CloseKey( rh )
            finally:
                reg.Close()

            if vw_dir != '':
                self.VMRUN_PATH = vw_dir + 'vmrun.exe'

    #
    # POWER COMMANDS
    #
    def start( self, mode 😞
        '''
        COMMAND                  PARAMETERS           DESCRIPTION
        start                    Path to vmx file     Start a VM or Team
                                 or vmtm file
                                 [gui|nogui]
        '''
        return self.vmrun( 'start', mode )

    def stop( self, mode='soft' 😞
        '''
        stop                     Path to vmx file     Stop a VM or Team
                                 or vmtm file
                                 [hard|soft]
        '''
        return self.vmrun( 'stop', mode )

    def reset( self, mode='soft' 😞
        '''
        reset                    Path to vmx file     Reset a VM or Team
                                 or vmtm file
                                 [hard|soft]
        '''
        return self.vmrun( 'reset', mode )

    def suspend( self, mode='soft' 😞
        '''
        suspend                  Path to vmx file     Suspend a VM or Team
                                 or vmtm file
                                 [hard|soft]
        '''
        return self.vmrun( 'suspend', mode )

    def pause( self 😞
        '''
        pause                    Path to vmx file     Pause a VM
        '''
        return self.vmrun( 'pause' )

    def unpause( self 😞
        '''
        unpause                  Path to vmx file     Unpause a VM
        '''
        return self.vmrun( 'unpause' )

    #
    # SNAPSHOT COMMANDS
    #
    def listSnapshots( self 😞
        return self.vmrun( 'listSnapshots' )

    def snapshot( self, name='binjo' 😞
        '''
        snapshot                 Path to vmx file     Create a snapshot of a VM
                                 Snapshot name
        '''
        return self.vmrun( 'snapshot', name )

    def deleteSnapshot( self, name='binjo' 😞
        '''
        deleteSnapshot           Path to vmx file     Remove a snapshot from a VM
                                 Snapshot name
        '''
        return self.vmrun( 'deleteSnapshot', name )

    def revertToSnapshot( self, name='binjo' 😞
        '''
        revertToSnapshot         Path to vmx file     Set VM state to a snapshot
                                 Snapshot name
        '''
        return self.vmrun( 'revertToSnapshot', name )

    #
    # RECORD/REPLAY COMMANDS
    #
    def beginRecording( self, snap_name='binjo' 😞
        '''
        beginRecording           Path to vmx file     Begin recording a VM
                                 Snapshot name
        '''
        return self.vmrun( 'beginRecording', snap_name )

    def endRecording( self 😞
        '''
        endRecording             Path to vmx file     End recording a VM
        '''
        return self.vmrun( 'endRecording' )

    def beginReplay( self, snap_name='binjo' 😞
        '''
        beginReplay              Path to vmx file     Begin replaying a VM
                                 Snapshot name
        '''
        return self.vmrun( 'beginReplay', snap_name )

    def endReplay( self 😞
        '''
        endReplay                Path to vmx file     End replaying a VM
        '''
        return self.vmrun( 'endReplay' )

    #
    # GUEST OS COMMANDS
    #
    # FIXME -noWait -activeWindow -interactive???
    def runProgramInGuest( self, program, *para 😞
        '''
        runProgramInGuest        Path to vmx file     Run a program in Guest OS
                                 [-noWait]
                                 [-activeWindow]
                                 [-interactive]
                                 Complete-Path-To-Program
                                 [Program arguments]
        '''
        return self.vmrun( 'runProgramInGuest', program, *para )

    # TODO straight return?
    def fileExistsInGuest( self, file 😞
        '''
        fileExistsInGuest        Path to vmx file     Check if a file exists in Guest OS
                                 Path to file in guest
        '''
        return self.vmrun( 'fileExistsInGuest', file )

    def setSharedFolderState( self, share_name, new_path, mode='readonly' 😞
        '''
        setSharedFolderState     Path to vmx file     Modify a Host-Guest shared folder
                                 Share name
                                 Host path
                                 writable | readonly
        '''
        return self.vmrun( 'setSharedFolderState', share_name, new_path, mode )

    def addSharedFolder( self, share_name, host_path 😞
        '''
        addSharedFolder          Path to vmx file     Add a Host-Guest shared folder
                                 Share name
                                 New host path
        '''
        return self.vmrun( 'addSharedFolder', share_name, host_path )

    def removeSharedFolder( self, share_name 😞
        '''
        removeSharedFolder       Path to vmx file     Remove a Host-Guest shared folder
                                 Share name
        '''
        return self.vmrun( 'removeSharedFolder', share_name )

    def listProcessesInGuest( self 😞
        '''
        listProcessesInGuest     Path to vmx file     List running processes in Guest OS
        '''
        return self.vmrun( 'listProcessesInGuest' )

    def killProcessInGuest( self, pid 😞
        '''
        killProcessInGuest       Path to vmx file     Kill a process in Guest OS
                                 process id
        '''
        return self.vmrun( 'killProcessInGuest', pid )

    def runScriptInGuest( self, interpreter_path, script 😞
        '''
        runScriptInGuest         Path to vmx file     Run a script in Guest OS
                                 Interpreter path
                                 script_text
        '''
        return self.vmrun( 'runScriptInGuest', interpreter_path, script )

    def deleteFileInGuest( self, file 😞
        '''
        deleteFileInGuest        Path to vmx file     Delete a file in Guest OS
                                 Path in guest
        '''
        return self.vmrun( 'deleteFileInGuest', file )

    def createDirectoryInGuest( self, dir 😞
        '''
        createDirectoryInGuest   Path to vmx file     Create a directory in Guest OS
                                 Directory path in guest
        '''
        return self.vmrun( 'createDirectoryInGuest', dir )

    def deleteDirectoryInGuest( self, dir 😞
        '''
        deleteDirectoryInGuest   Path to vmx file     Delete a directory in Guest OS
                                 Directory path in guest
        '''
        return self.vmrun( 'deleteDirectoryInGuest', dir )

    def listDirectoryInGuest( self, dir 😞
        '''
        listDirectoryInGuest     Path to vmx file     List a directory in Guest OS
                                 Directory path in guest
        '''
        return self.vmrun( 'listDirectoryInGuest', dir )

    def copyFileFromHostToGuest( self, host_path, guest_path 😞
        '''
        copyFileFromHostToGuest  Path to vmx file     Copy a file from host OS to guest OS
                                 Path on host
                                 Path in guest
        '''
        return self.vmrun( 'copyFileFromHostToGuest', host_path, guest_path )

    def copyFileFromGuestToHost( self, guest_path, host_path 😞
        '''
        copyFileFromGuestToHost  Path to vmx file     Copy a file from guest OS to host OS
                                 Path in guest
                                 Path on host
        '''
        return self.vmrun( 'copyFileFromGuestToHost', guest_path, host_path )

    def renameFileInGuest( self, org_name, new_name 😞
        '''
        renameFileInGuest        Path to vmx file     Rename a file in Guest OS
                                 Original name
                                 New name
        '''
        return self.vmrun( 'renameFileInGuest', org_name, new_name )

    def captureScreen( self, path_on_host 😞
        '''
        captureScreen            Path to vmx file     Capture the screen of the VM to a local file
                                 Path on host
        '''
        return self.vmrun( 'captureScreen', path_on_host )

    def writeVariable( self, mode, v_name, v_value 😞
        '''
        writeVariable            Path to vmx file     Write a variable in the VM state
                                 [runtimeConfig|guestEnv]
                                 variable name
                                 variable value
        '''
        if mode is not None:
            return self.vmrun( 'writeVariable', mode, v_name, v_value )
        else:
            return self.vmrun( 'writeVariable', v_name, v_value )

    def readVariable( self, mode, v_name 😞
        '''
        readVariable             Path to vmx file     Read a variable in the VM state
                                 [runtimeConfig|guestEnv]
                                 variable name
        '''
        if mode is not None:
            return self.vmrun( 'readVariable', mode, v_name )
        else:
            return self.vmrun( 'readVariable', v_name )

    #
    # VPROBE COMMANDS
    #
    def vprobeVersion( self 😞
        '''
        vprobeVersion            Path to vmx file     List VP version
        '''
        return self.vmrun( 'vprobeVersion' )

    def vprobeLoad( self, script 😞
        '''
        vprobeLoad               Path to vmx file     Load VP script
                                 'VP script text'
        '''
        return self.vmrun( 'vprobeLoad', script )

    def vprobeListProbes( self 😞
        '''
        vprobeListProbes         Path to vmx file     List probes
        '''
        return self.vmrun( 'vprobeListProbes' )

    def vprobeListGlobals( self 😞
        '''
        vprobeListGlobals        Path to vmx file     List global variables
        '''
        return self.vmrun( 'vprobeListGlobals' )

    #
    # GENERAL COMMANDS
    #
    def list( self 😞
        '''
        list                                          List all running VMs
        '''
        return self.vmrun( 'list' )

    def upgradevm( self 😞
        '''
        upgradevm                Path to vmx file     Upgrade VM file format, virtual hw
        '''
        return self.vmrun( 'upgradevm', self.VM_FILE )

    def installtools( self 😞
        '''
        installtools             Path to vmx file     Install Tools in Guest OS
        '''
        return self.vmrun( 'installtools', self.VM_FILE )

    def clone( self, dest_vmx, mode, snap_name='binjo' 😞
        '''
        clone                    Path to vmx file     Create a copy of the VM
                                 Path to destination vmx file
                                 full|linked
                                 [Snapshot name]
        '''
        return self.vmrun( 'clone', dest_vmx, mode, snap_name )

if __name__ == '__main__':
    print 'Hello World'

END Python

----- Here are the module calls:

START Python

import sys
import time
import vmrun

# Revert to the clean test image
def revert_image(virtualMachine, userNameOnGuest, passwd, snapshotName, vmStartMode):

print "Reverting to clean VM test image..."
vm = vmrun.Vmrun(virtualMachine, userNameOnGuest, passwd)
vm.revertToSnapshot(snapshotName)
print "Starting the VM..."
vm.start(vmStartMode)


# Start VM
def start_vm(virtualMachine, userNameOnGuest, passwd, vmStartMode):

print "Starting VM..."
vm = vmrun.Vmrun(virtualMachine, userNameOnGuest, passwd)
vm.start(vmStartMode)


# Copy file(s) from Host to Guest
def copy_file_to_vm(virtualMachine, userNameOnGuest, passwd, sourceDirOnHost, destDirOnGuest): 

print "Copying file from", sourceDirOnHost, "on host to", destDirOnGuest, "on VM..."
vm = vmrun.Vmrun(virtualMachine, userNameOnGuest, passwd)
vm.copyFileFromHostToGuest(sourceDirOnHost, destDirOnGuest)


# Check to see if file(s) got copied to the guest
def check__file_exists(virtualMachine, userNameOnGuest, passwd, fileNameOnGuest):

print "Checking to see if", fileNameOnGuest, "exists on VM..."
vm = vmrun.Vmrun(virtualMachine, userNameOnGuest, passwd)
vm.fileExistsInGuest(fileNameOnGuest)


# Run file on guest
def run_file(virtualMachine, userNameOnGuest, passwd, fileOnGuest):

print "Running file", fileOnGuest, "on VM..."
vm = vmrun.Vmrun(virtualMachine, userNameOnGuest, passwd)
vm.runProgramInGuest(fileOnGuest)


# Take snapshot of VM...
def take_snapshot(testName, userNameOnGuest, virtualMachine, passwd):

print "Test has failed, so taking snapshot of VM..."
date = time.strftime("%a%c%p")
list = [ '"', testName, ' ', userNameOnGuest, ' ', date, '"']
NAME = "".join(list)
print "Snapshot name is", NAME
vm = vmrun.Vmrun(virtualMachine, userNameOnGuest, passwd)
vm.snapshot(name=NAME)


# Shutdown VM (either soft or hard reset mode)...
def shutdown_vm(virtualMachine, userNameOnGuest, passwd, vmStopMode):

print "Shutting down VM -", vmStopMode, "..."
vm = vmrun.Vmrun(virtualMachine, userNameOnGuest, passwd)
vm.stop(vmStopMode)

END Python

----- Here is the Robot Framework stuff

Check_Registry.txt

*** Settings ***
Resource        __resource_BI_PD_Default_MSI_Install.html

*** Test Cases ***
Start
    Start

Install
    Install

End
    End

__resource_BI_Default_MSI_Install.txt

*** Settings ***
Library         OperatingSystem
Library         BI_CommonLibrary
Library         String

*** Variables ***
${TESTNAME}  PD Default MSI Install
${MSIFILENAME}  "SMART Product Drivers.msi"
${VIRTUALMACHINE}  E:\\My Virtual Machines\\Windows 7 x64\\Windows 7 x64.vmx
${SNAPSHOTNAME}  "Win7CleanImage"
${USERNAMEONGUEST}  "Win764bit"
${PASSWD}  "letmein"
${VMSTARTMODE}  nogui
${VMSTOPMODE}  hard
${MSISOURCEDIRONGUEST}  C:\\Windows\\Temp
${MSIFILENAMEONGUEST}  "C:\\Windows\\Temp\\SMART Product Drivers.msi"
${INSTALLBATCHFILEONGUEST}  C:\\Windows\\Temp\\BI_PD_Default_MSI_Install.bat
${APPFILEONGUEST}  "C:\\Program Files (x86)\\SMART Technologies\\SMART Product Drivers\\SMARTBoardTools.exe"
${HOSTIPADDRESS}  \\\\D000812
${VMIPADDRESS}  \\\\192.168.80.128
${KEYPREFIX}  \\HKLM\\SOFTWARE\\Wow6432Node\\SMART Technologies\\
${KEYPREFIXInc}  \\HKLM\\SOFTWARE\\Wow6432Node\\SMART Technologies Inc.\\
${AWAREKEYPREFIX}  \\HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Office\\
${DRIVERSDIRECTORY}  C:\\Program Files (x86)\\SMART Technologies\\SMART Product Drivers\\
${COMMONFILESDIR}  C:\\Program Files (x86)\\Common Files\\SMART Technologies\\
${SPUVERSION}  4.0.85.1
${MSISOURCEDIRONHOST}  C:\\BuildAgent1\\work\\53d03e050d4bfa7
${INSTALLBATCHFILEONHOST}  C:\\BuildAgent1\\work\\53d03e050d4bfa7\\BI_PD_Default_MSI_Install.bat

*** Keywords ***
Test Suite Set Up
    [Documentation]  Test Suite Setup
    Revert Image  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${SNAPSHOTNAME}  ${VMSTARTMODE}
    Copy File to VM  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${MSISOURCEDIRONHOST}  ${MSISOURCEDIRONGUEST}
    Check File Exists  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${MSIFILENAMEONGUEST}
    Copy File to VM  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${INSTALLBATCHFILEONHOST}  ${INSTALLBATCHFILEONGUEST}
    Check File Exists  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${INSTALLBATCHFILEONGUEST}
    Log  Ensuring the Remote Registry Service is running on the host machine (ignores return if instance is already running)...
    ${output}  Run and Return RC and Output  SC ${HOSTIPADDRESS} start RemoteRegistry
    Log  Opening network connection to virtual machine...
    ${rc}  ${output}  Run and Return RC and Output  NET USE ${VMIPADDRESS}\\IPC$ /user:${USERNAMEONGUEST} ${PASSWD}
    Sleep  5s  Wait for connection in case of network delay...
    Should Be Equal As Integers  ${rc}  0
    Log  Starting Remote Registry Service on virtual machine - default state is manual/stopped...
    ${rc}  ${output}  Run and Return RC and Output  "SC ${VMIPADDRESS} start RemoteRegistry"
    Sleep  7s  Wait for Service to Stabilize otherwise may fail...
    Should Be Equal As Integers  ${rc}  0

Install
    [Documentation]  Installs Product Drivers silently (/q) via msi utilizing a batch file and checks to see if the file 'SMARTBoardTools.exe' exists.
    Run File  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${INSTALLBATCHFILEONGUEST}
    Check File Exists  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${APPFILEONGUEST}

HKLM Install Info
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\Install Information
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\Install Information
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Install Information" /v "Drivers Version" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Drivers Version  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Drivers Version${SPACE*4}REG_SZ${SPACE*4}${DRIVERSVERSION}
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Install Information" /v "Drivers Directory" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Drivers Directory  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Drivers Directory${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Install Information" /v "Company" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  ${SPACE*4}Company${SPACE*4}REG_SZ  case_insensitive=False
    Get Length  ${lines}
    Length Should Be  ${lines}  25

HKLM SNMP Agent
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\SNMPAgent
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\SNMPAgent
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\SNMPAgent" /v "InstallDir" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  InstallDir  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}InstallDir${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\SNMPAgent" /v "SNMP_PERSISTENT_DIR" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  SNMP_PERSISTENT_DIR  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}SNMP_PERSISTENT_DIR${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}\SNMPAgent\\persist
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\SNMPAgent" /v "SNMPCONFPATH" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  SNMPCONFPATH  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}SNMPCONFPATH${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}\SNMPAgent\\config;${DRIVERSDIRECTORY}\SNMPAgent\\persist
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\SNMPAgent" /v "SNMPSHAREPATH" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  SNMPSHAREPATH  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}SNMPSHAREPATH${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}\SNMPAgent
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\SNMPAgent" /v "Version" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Version  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Version${SPACE*4}REG_SZ${SPACE*4}${DRIVERSVERSION}

HKLM Control Panel
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\Control Panel
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\Control Panel
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Control Panel" /v "Horizontal" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Horizontal  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Horizontal${SPACE*4}REG_DWORD${SPACE*4}0x0
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Control Panel" /v "Image" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Image  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Image${SPACE*4}REG_SZ${SPACE*4}
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Control Panel" /v "Position" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Position
    Should Match  ${lines}  ${SPACE*4}Position${SPACE*4}REG_DWORD${SPACE*4}0x0
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Control Panel" /v "Transparency" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Transparency  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Transparency${SPACE*4}REG_DWORD${SPACE*4}0x32
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Control Panel" /v "Vertical" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Vertical
    Should Match  ${lines}  ${SPACE*4}Vertical${SPACE*4}REG_DWORD${SPACE*4}0x0

HKLM Marker
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\Marker
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\Marker
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Marker" /v "BorderWidth" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  BorderWidth  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}BorderWidth${SPACE*4}REG_DWORD${SPACE*4}0x5
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\Marker" /v "ShowBorder" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  ShowBorder  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}ShowBorder${SPACE*4}REG_DWORD${SPACE*4}0x1

HKLM Disp Ctrl Apps
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\DisplayCtrlApps\\ConfigureFile\n\nHKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\DisplayCtrlApps\\Universal Controller
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\DisplayCtrlApps\\ConfigureFile
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DisplayCtrlApps\\ConfigureFile" /ve
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  (Default)  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}(Default)${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}\Config Files
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\DisplayCtrlApps\\Universal Controller
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DisplayCtrlApps\\Universal Controller" /ve
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  (Default)  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}(Default)${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}\UniversalController.exe

HKLM Lang Setup
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\Language Setup\\SMART Board\n\nHKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\Language Setup\\SPU
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\Language Setup\\SMART Board
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Language Setup\\SMART Board" /v "DisplayName" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  DisplayName  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}DisplayName${SPACE*4}REG_SZ${SPACE*4}SMART Board Drivers
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Language Setup\\SMART Board" /v "IsHWConfigurable" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  IsHWConfigurable  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}IsHWConfigurable${SPACE*4}REG_DWORD${SPACE*4}0x1
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Language Setup\\SMART Board" /v "IsLanguageConfigurable" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  IsLanguageConfigurable  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}IsLanguageConfigurable${SPACE*4}REG_DWORD${SPACE*4}0x1
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Language Setup\\SMART Board" /v "LanguagesFolder" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  LanguagesFolder  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}LanguagesFolder${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}\Languages\\
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\Language Setup\\SPU
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Language Setup\\SPU" /v "DisplayName" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  SMART Product Update  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}DisplayName${SPACE*4}REG_SZ${SPACE*4}SMART Product Update
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Language Setup\\SPU" /v "IsHWConfigurable" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  IsHWConfigurable  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}IsHWConfigurable${SPACE*4}REG_DWORD${SPACE*4}0x0
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Language Setup\\SPU" /v "IsLanguageConfigurable" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  IsLanguageConfigurable  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}IsLanguageConfigurable${SPACE*4}REG_DWORD${SPACE*4}0x0
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Language Setup\\SPU" /v "LanguagesFolder" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  LanguagesFolder  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}LanguagesFolder${SPACE*4}REG_SZ${SPACE*4}${COMMONFILESDIR}\SMART Product Update\\Languages\\

HKLM SPU
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\Product Update\n\nHKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Product Update
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\Product Update
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Product Update" /v "CheckUpdates" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  CheckUpdates  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}CheckUpdates${SPACE*4}REG_DWORD${SPACE*4}0x1
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Product Update" /v "Interval" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Interval  case_insensitive=False
    Should Match Regexp  ${lines}  Interval ${SPACE*2} REG_DWORD ${SPACE*2} 0x1[eE]
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Product Update" /v "Version" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Version  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Version${SPACE*4}REG_SZ${SPACE*4}${SPUVERSION}
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}Product Update" /v "ExePath" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  ExePath  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}ExePath${SPACE*4}REG_SZ${SPACE*4}${COMMONFILESDIR}\SMART Product Update\\
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Product Update
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Product Update" /v "Version" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Version  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Version${SPACE*4}REG_SZ${SPACE*4}${SPUVERSION}
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Product Update" /v "ExePath" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  ExePath  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}ExePath${SPACE*4}REG_SZ${SPACE*4}${COMMONFILESDIR}\SMART Product Update\\

HKLM Doc Cam
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\DocumentCamera
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\DocumentCamera
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DocumentCamera" /v "Path" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Path  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Path${SPACE*4}REG_SZ${SPACE*4}${DRIVERSDIRECTORY}
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\DocumentCamera\\Model\\SDC280
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DocumentCamera\\Model\\SDC280" /v "Component" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Component  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Component${SPACE*4}REG_SZ${SPACE*4}SDC280
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DocumentCamera\\Model\\SDC280" /v "ModelID" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  ModelID  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}ModelID${SPACE*4}REG_DWORD${SPACE*4}0x8
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DocumentCamera\\Model\\SDC280" /v "uuid" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  uuid  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}uuid${SPACE*4}REG_SZ${SPACE*4}\{A5D7ECFE-F3C2-4e18-BD4A-CD997DEEC3B4\}
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\SMART Technologies\\SMART Board Drivers\\DocumentCamera\\Model\\SDC330
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DocumentCamera\\Model\\SDC330" /v "Component" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Component  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Component${SPACE*4}REG_SZ${SPACE*4}SDC330
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DocumentCamera\\Model\\SDC330" /v "ModelID" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  ModelID  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}ModelID${SPACE*4}REG_DWORD${SPACE*4}0x7
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${KEYPREFIX}SMART Board Drivers\\DocumentCamera\\Model\\SDC330" /v "uuid" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  uuid  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}uuid${SPACE*4}REG_SZ${SPACE*4}\{58860CA7-2342-4a8a-83C0-17BA85668989\}

HKLM Aware
    [Documentation]  HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Office
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Office\\Visio\\Addins\\AwareMSOfficeAddin.AwareAddin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Visio\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "CommandLineSafe" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  CommandLineSafe  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}CommandLineSafe${SPACE*4}REG_DWORD${SPACE*4}0x0
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Visio\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "Description" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Description  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Description${SPACE*4}REG_SZ${SPACE*4}Aware MS Office Addin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Visio\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "FriendlyName" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  FriendlyName  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}FriendlyName${SPACE*4}REG_SZ${SPACE*4}Aware MS Office Addin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Visio\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "LoadBehavior" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  LoadBehavior  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}LoadBehavior${SPACE*4}REG_DWORD${SPACE*4}0x3
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Office\\PowerPoint\\Addins\\AwareMSOfficeAddin.AwareAddin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}PowerPoint\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "CommandLineSafe" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  CommandLineSafe  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}CommandLineSafe${SPACE*4}REG_DWORD${SPACE*4}0x0
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}PowerPoint\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "Description" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Description  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Description${SPACE*4}REG_SZ${SPACE*4}Aware MS Office Addin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}PowerPoint\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "FriendlyName" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  FriendlyName  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}FriendlyName${SPACE*4}REG_SZ${SPACE*4}Aware MS Office Addin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}PowerPoint\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "LoadBehavior" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  LoadBehavior  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}LoadBehavior${SPACE*4}REG_DWORD${SPACE*4}0x3
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Office\\Excel\\Addins\\AwareMSOfficeAddin.AwareAddin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Excel\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "CommandLineSafe" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  CommandLineSafe  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}CommandLineSafe${SPACE*4}REG_DWORD${SPACE*4}0x0
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Excel\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "Description" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Description  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Description${SPACE*4}REG_SZ${SPACE*4}Aware MS Office Addin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Excel\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "FriendlyName" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  FriendlyName  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}FriendlyName${SPACE*4}REG_SZ${SPACE*4}Aware MS Office Addin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Excel\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "LoadBehavior" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  LoadBehavior  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}LoadBehavior${SPACE*4}REG_DWORD${SPACE*4}0x3
    Log  Checking HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Office\\Word\\Addins\\AwareMSOfficeAddin.AwareAddin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Word\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "CommandLineSafe" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  CommandLineSafe  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}CommandLineSafe${SPACE*4}REG_DWORD${SPACE*4}0x0
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Word\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "Description" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Description  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}Description${SPACE*4}REG_SZ${SPACE*4}Aware MS Office Addin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Word\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "FriendlyName" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  FriendlyName  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}FriendlyName${SPACE*4}REG_SZ${SPACE*4}Aware MS Office Addin
    ${rc}  ${output}  Run and Return RC and Output  REG QUERY "${VMIPADDRESS}${AWAREKEYPREFIX}Word\\Addins\\AwareMSOfficeAddin.AwareAddin" /v "LoadBehavior" /s
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  LoadBehavior  case_insensitive=False
    Should Match  ${lines}  ${SPACE*4}LoadBehavior${SPACE*4}REG_DWORD${SPACE*4}0x3

Services
    [Documentation]  Installed Services
    Log  Checking SMART Display Controller
    ${rc}  ${output}  Run and Return RC and Output  "SC ${VMIPADDRESS} query "SMART Display Controller""
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  STATE  case_insensitive=False
    Should Contain  ${lines}  STOPPED
    Log  Checking SMARTNetService
    ${rc}  ${output}  Run and Return RC and Output  "SC ${VMIPADDRESS} query "SMARTNetService""
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  STATE  case_insensitive=False
    Should Contain  ${lines}  RUNNING

Processes
    [Documentation]  Running Processes
    Log  Checking process for Aware
    ${rc}  ${output}  Run and Return RC and Output  C:\\Windows\\System32\\pslist /accepteula ${VMIPADDRESS} -u ${USERNAMEONGUEST} -p ${PASSWD} Aware
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  Aware  case_insensitive=False
    Should Contain  ${lines}  Aware
    Log  Checking process for SMARTBoardService
    ${rc}  ${output}  Run and Return RC and Output  C:\\Windows\\System32\\pslist ${VMIPADDRESS} -u ${USERNAMEONGUEST} -p ${PASSWD} SMARTBoardService
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  SMARTBoardService  case_insensitive=False
    Should Contain  ${lines}  SMARTBoardService
    Log  Checking process for SMARTBoardTools
    ${rc}  ${output}  Run and Return RC and Output  C:\\Windows\\System32\\pslist ${VMIPADDRESS} -u ${USERNAMEONGUEST} -p ${PASSWD} SMARTBoardTools
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  SMARTBoardTools  case_insensitive=False
    Should Contain  ${lines}  SMARTBoardTools
    Log  Checking process for SMARTSNMPAgent
    ${rc}  ${output}  Run and Return RC and Output  C:\\Windows\\System32\\pslist ${VMIPADDRESS} -u ${USERNAMEONGUEST} -p ${PASSWD} SMARTSNMPAgent
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  SMARTSNMPAgent  case_insensitive=False
    Should Contain  ${lines}  SMARTSNMPAgent
    Log  Checking process for SMARTNetService
    ${rc}  ${output}  Run and Return RC and Output  C:\\Windows\\System32\\pslist ${VMIPADDRESS} -u ${USERNAMEONGUEST} -p ${PASSWD} SMARTNetService
    Should Be Equal As Integers  ${rc}  0
    ${lines} =  Get Lines Containing String  ${output}  SMARTNetService  case_insensitive=False
    Should Contain  ${lines}  SMARTNetService

Test Suite Tear Down
    [Documentation]  Take snapshot IF any CRITICAL tests fail, shut down VM (set according to ${MODE}) Close any remote network connection between host and guest If any CRITICAL test fails, a snapshot is taken of the virtual machine
    Log  Closing network connection to virtual machine - keeps host cleaner...
    ${rc}  ${output}  Run and Return RC and Output  NET USE ${VMIPADDRESS}\\IPC$ /delete /Y
    Should Be Equal As Integers  ${rc}  0
    Run Keyword If Any Critical Tests Failed  Take Snapshot  ${TESTNAME}  ${USERNAMEONGUEST}  ${VIRTUALMACHINE}  ${PASSWD}
    Shutdown VM  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${VMSTOPMODE}

Start
    [Documentation]  Test Suite Setup
    Revert Image  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${SNAPSHOTNAME}  ${VMSTARTMODE}
    Copy File to VM  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${MSISOURCEDIRONHOST}  ${MSISOURCEDIRONGUEST}
    Check File Exists  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${MSIFILENAMEONGUEST}
    Copy File to VM  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${INSTALLBATCHFILEONHOST}  ${INSTALLBATCHFILEONGUEST}
    Check File Exists  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${INSTALLBATCHFILEONGUEST}
    Log  Ensuring the Remote Registry Service is running on the host machine (ignores return if instance is already running)...
    ${output}  Run and Return RC and Output  SC ${HOSTIPADDRESS} start RemoteRegistry
    Log  Opening network connection to virtual machine...
    ${rc}  ${output}  Run and Return RC and Output  NET USE ${VMIPADDRESS}\\IPC$ /user:${USERNAMEONGUEST} ${PASSWD}
    Sleep  5s  Wait for connection in case of network delay...
    Should Be Equal As Integers  ${rc}  0
    Log  Starting Remote Registry Service on virtual machine - default state is manual/stopped...
    ${rc}  ${output}  Run and Return RC and Output  "SC ${VMIPADDRESS} start RemoteRegistry"
    Sleep  7s  Wait for Service to Stabilize otherwise may fail...
    Should Be Equal As Integers  ${rc}  0

End
    [Documentation]  Take snapshot IF any CRITICAL tests fail, shut down VM (set according to ${MODE}) Close any remote network connection between host and guest If any CRITICAL test fails, a snapshot is taken of the virtual machine
    Log  Closing network connection to virtual machine - keeps host cleaner...
    ${rc}  ${output}  Run and Return RC and Output  NET USE ${VMIPADDRESS}\\IPC$ /delete /Y
    Should Be Equal As Integers  ${rc}  0
    Take Snapshot  ${TESTNAME}  ${USERNAMEONGUEST}  ${VIRTUALMACHINE}  ${PASSWD}
    Shutdown VM  ${VIRTUALMACHINE}  ${USERNAMEONGUEST}  ${PASSWD}  ${VMSTOPMODE}

BI_PD_Default_MSI_Install.bat

msiexec /i "C:\Windows\Temp\SMART Product Drivers.msi" /qb

0 Kudos
admin
Immortal
Immortal
Jump to solution

Hi JerriM,

I took a quick look through your script, but I do not know Robot Frameworks.

Let me give you some quick description of some the vmrun options that might help.

For vmrun start-

nogui: This should not affect what happens within the virtual machine. All it does is determine whether the virtual machine, when it powers on, does so within the VMware Workstation UI, or if it runs in the background on the host.

For vmrun runProgramInGuest-

interactive: I think this is where the problem is. When you run a program using vmrun, by default it is started by a Windows service running inside the guest. On Windows Vista and later, services do not have access to any user desktop environment. They exist in some hidden desktop. So, any UI start by these applications will never be visible to the user. If you need to start a program that must be interacted with directly (via the guest's console/display) then you should use the "-interactive" option. However, this does require that the user account must be logged into the Windows desktop (such as via the log in screen when Windows boots up); the simplest way is to enable auto-login, so the account automatically logs in.

noWait: This makes vmrun exit as soon at the program in the guest starts, instead of waiting for it to exit.

activeWindow: This makes the program run in the guest, if it is a UI, start with a non-minimized window.

Let me know if this helps.

0 Kudos
JerriM
Contributor
Contributor
Jump to solution

Hi Matt,

Thanks!  Using the –interactive option has cured my problem Smiley Happy !  Thanks so much for the timely reply!

JerriM

0 Kudos
JerriM
Contributor
Contributor
Jump to solution

Hi Matt,

Thanks! Using the –interactive option has cured my problem ☺! Thanks so much for the timely reply!

JerriM

0 Kudos