Name
VMRunProgramInGuestEx
Description
($err, %procInfo) = VMRunProgramInGuestEx($vmHandle,
$guestProgramName,
$commandLineArgs,
$options,
$propertyListHandle);
This function runs a program in the guest operating system. The program must
be stored on a file system available to the guest before calling this function.
Parameters
- vmHandle
-
Identifies a virtual machine. Call VMOpen() to create a virtual machine handle.
- guestProgramName
-
The path name of an executable file on the guest
operating system.
- commandLineArgs
-
A string to be passed as command line arguments to the
executable identified by guestProgramName.
- options
-
Run options for the program. See the remarks below.
- propertyListHandle
-
Must be VIX_INVALID_HANDLE.
Return Value
$err. The error code returned by the operation. For returned values, see Topics > Error Codes.
%procInfo is a hash containing information about the newly created process.
Remarks
- This function runs a program in the guest operating system. The program must
be stored on a file system available to the guest before calling this
function.
- The current working directory for the program in the guest is not defined.
Absolute paths should be used for files in the guest, including
guestProgramName and any command-line arguments.
- You must call VMLoginInGuest() before calling this function.
- If the program to run in the guest is intended to be visible to the user in
the guest, such as an application with a graphical user interface, you must
call VMLoginInGuest() with
VIX_LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT as the option
before calling this function. This will ensure that the
program is run within a graphical session that is visible to the user.
- If the options parameter is 0, this function will return
when the program exits in the guest operating system.
Alternatively, you can pass VIX_RUNPROGRAM_RETURN_IMMEDIATELY as the
value of the options parameter, and this function returns
as soon as the program starts in the guest.
- For Windows guest operating systems, when running a program with a graphical
user interface, you can pass VIX_RUNPROGRAM_ACTIVATE_WINDOW
as the value of the options parameter. This option will ensure that the
application's window is visible and not minimized on the guest's screen.
This can be combined with the VIX_RUNPROGRAM_RETURN_IMMEDIATELY
flag using the bitwise inclusive OR operator (|).
VIX_RUNPROGRAM_ACTIVATE_WINDOW has no effect on Linux guest operating
systems.
- On a Linux guest operating system, if you are running a program with a
graphical user interface, it must know what X Windows display to use,
for example host:0.0, so it can make the program visible on that display.
Do this by passing the -display argument to the program, if it supports
that argument, or by setting the DISPLAY environment variable on the guest.
See documentation on
VMWriteVariable.
- Depending on the behavior of the guest operating system, there may be a
short delay after the job completes before the process is visible in the
guest operating system.
- When VMRunProgramInGuestEx returns, %procInfo will contain information
about the new process.
- PROCESS_ID: the process id.
- ELAPSED_TIME: the process elapsed time in seconds;
- EXIT_CODE: the process exit code.
If the option parameter is VIX_RUNPROGRAM_RETURN_IMMEDIATELY, the latter two will
both be undef.
Side Effects
None.
Requirements
use VMware::Vix::Simple;
use VMware::Vix::API::Constants;
since VMware Server 1.0
Minimum Supported Guest OS: Microsoft Windows NT Series, Linux
Example
my $err = VIX_OK;
my $hostHandle = VIX_INVALID_HANDLE;
my $vmHandle = VIX_INVALID_HANDLE;
($err, $hostHandle) = HostConnect(VIX_API_VERSION,
VIX_SERVICEPROVIDER_VMWARE_WORKSTATION,
undef, # hostName
0, # hostPort
undef, # userName
undef, # password
0, # options
VIX_INVALID_HANDLE); # propertyListHandle
die "HostConnect() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;
($err, $vmHandle) = VMOpen($hostHandle,
"c:\\Virtual Machines\\vm1\\win2000.vmx");
die "VMOpen() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;
$err = VMPowerOn($vmHandle,
0, # powerOnOptions
VIX_INVALID_HANDLE); # propertyListHandle
die "VMPowerOn() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;
$err = VMWaitForToolsInGuest($vmHandle,
300); # timeoutInSeconds
die "VMWaitForToolsInGuest() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;
$err = VMLoginInGuest($vmHandle,
"vixuser", # userName
"secret", # password
0); # options
die "VMLoginInGuest() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;
my %procInfo;
# Run the target program.
($err, %procInfo) = VMRunProgramInGuestEx($vmHandle,
"c:\\myProgram.exe",
"/flag arg1 arg2",
0, # options
VIX_INVALID_HANDLE);
die "VMRunProgramInGuestEx() failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;
print "Process id $procInfo{'PROCESS_ID'}, Exit code $procInfo{'EXIT_CODE'}, Elapsed time $procInfo{'ELAPSED_TIME'} \n";
ReleaseHandle($vmHandle);
HostDisconnect($hostHandle);