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
Thanks
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.
post your scripts so that we can inspect them
I'm using Robot Framework to launch and start the vm from python based keywords. Here goes.... I hope someone knows Robot Frameworks
----- 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
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.
Hi Matt,
Thanks! Using the –interactive option has cured my problem ! Thanks so much for the timely reply!
JerriM
Hi Matt,
Thanks! Using the –interactive option has cured my problem ☺! Thanks so much for the timely reply!
JerriM