Name

VixVM_RunScriptInGuest

Description

VixHandle
VixVM_RunScriptInGuest(VixHandle vmHandle,
                       const char *interpreter,
                       const char *scriptText,
                       VixRunProgramOptions options,
                       VixHandle propertyListHandle,
                       VixEventProc *callbackProc,
                       void *clientData);

This function runs a script in the guest operating system.

Parameters

vmHandle
Identifies a virtual machine. Call VixVM_Open() to create a virtual machine handle.
interpreter
The path to the script interpreter, or NULL to use cmd.exe as the interpreter on Windows.
scriptText
The text of the script.
options
Run options for the program. See the remarks below.
propertyListHandle
Must be VIX_INVALID_HANDLE.
callbackProc
A callback function that will be invoked when the operation is complete.
clientData
A parameter that will be passed to the callbackProc function.

Return Value

VixHandle. A job handle that describes the state of this asynchronous operation.

Remarks

Side Effects

None.

Requirements

vix.h, since VMware Workstation 6.0
Minimum Supported Guest OS: Microsoft Windows NT Series, Linux

Example

VixError err = VIX_OK;
VixHandle hostHandle = VIX_INVALID_HANDLE;
VixHandle jobHandle = VIX_INVALID_HANDLE;
VixHandle vmHandle = VIX_INVALID_HANDLE;

jobHandle = VixHost_Connect(VIX_API_VERSION,
                            VIX_SERVICEPROVIDER_VMWARE_WORKSTATION,
                            NULL, // hostName
                            0, // hostPort
                            NULL, // userName
                            NULL, // password
                            0, // options
                            VIX_INVALID_HANDLE, // propertyListHandle
                            NULL, // callbackProc
                            NULL); // clientData

err = VixJob_Wait(jobHandle,
                  VIX_PROPERTY_JOB_RESULT_HANDLE,
                  &hostHandle,
                  VIX_PROPERTY_NONE);

if (VIX_OK != err) {
   // Handle the error...
   goto abort;
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VixVM_Open(hostHandle,
                       "c:\\Virtual Machines\\vm1\\win2000.vmx",
                       NULL, // callbackProc
                       NULL); // clientData
err = VixJob_Wait(jobHandle,
                  VIX_PROPERTY_JOB_RESULT_HANDLE,
                  &vmHandle,
                  VIX_PROPERTY_NONE);
if (VIX_OK != err) {
   // Handle the error...
   goto abort;
}

Vix_ReleaseHandle(jobHandle);

jobHandle = VixVM_PowerOn(vmHandle,
                          0, // powerOnOptions
                          VIX_INVALID_HANDLE, // propertyListHandle
                          NULL, // callbackProc
                          NULL); // clientData

err = VixJob_Wait(jobHandle,VIX_PROPERTY_NONE);
if (VIX_OK != err) {
   // Handle the error...
   goto abort;
}

Vix_ReleaseHandle(jobHandle);

// Wait until guest is completely booted.
jobHandle = VixVM_WaitForToolsInGuest(vmHandle,
                                      300, // timeoutInSeconds
                                      NULL, // callbackProc
                                      NULL); // clientData

err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
   // Handle the error...
   goto abort;
}

Vix_ReleaseHandle(jobHandle);

// Authenticate for guest operations.
jobHandle = VixVM_LoginInGuest(vmHandle,
                               "vixuser", // userName
                               "secret", // password
                               0, // options
                               NULL, // callbackProc
                               NULL); // clientData

err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
   // Handle the error...
   goto abort;
}

Vix_ReleaseHandle(jobHandle);

/*
 * Perl script to reverse the lines in a file.
 * The const declaration here, instead of at the top, makes this a cpp program.
 */
const char *scripttext = 
"if (!open IN, \"<\", \"in.txt\") { die \"failed to open input file\"};\n"
"if (!open OUT, \">\", \"out.txt\") { die \"failed to open output file\"};\n"
"@input = <IN>;\n"
"@reverse = reverse @input;\n"
"print OUT @reverse;\n" ;
/*
 * With alternate script, use NULL interpreter.
 */
const char *altscript =
"cmd.exe /k \"C:\\Program Files\\Microsoft Visual Studio\\VC\\vcvarsall.bat\" x86";

// Run the target program.
jobHandle = VixVM_RunScriptInGuest(vmHandle,
                                   "c:\\perl\\perl.exe",
                                   scripttext,
                                   0, // options,
                                   VIX_INVALID_HANDLE, // propertyListHandle,
                                   NULL, // callbackProc,
                                   NULL); // clientData

err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);

if (VIX_OK != err) {
   // Handle the error...
   goto abort;
}

abort:
Vix_ReleaseHandle(jobHandle);
Vix_ReleaseHandle(vmHandle);
VixHost_Disconnect(hostHandle);


Copyright (C) 2007-2010 VMware, Inc. All rights reserved.