# Name

VixVM_InstallTools

# Description

    VixHandle
    VixVM_InstallTools(VixHandle vmHandle,
                       int options,
                       char *commandLineArgs,
                       VixEventProc *callbackProc,
                       void *clientData);

Prepares to install VMware Tools on the guest operating system.

# Parameters

vmHandle
  Identifies a virtual machine. Call VixVM_Open() to create a virtual machine handle.
options
  May be either VIX_INSTALLTOOLS_MOUNT_TOOLS_INSTALLER or VIX_INSTALLTOOLS_AUTO_UPGRADE. Either flag can be combined with the VIX_INSTALLTOOLS_RETURN_IMMEDIATELY flag using the bitwise inclusive OR operator (|). See remarks for more information.
commandLineArgs
  Must be NULL.
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

- If the option VIX_INSTALLTOOLS_MOUNT_TOOLS_INSTALLER is provided, the function prepares an ISO image to install VMware Tools on the guest operating system. If autorun is enabled, as it often is on Windows, installation begins, otherwise you must initiate installation. If VMware Tools is already installed, this function prepares to upgrade it to the version matching the product.
- If the option VIX_INSTALLTOOLS_AUTO_UPGRADE is provided, the function attempts to automatically upgrade VMware Tools without any user interaction required, and then reboots the virtual machine. This option requires that a version of VMware Tools already be installed. If VMware Tools is not already installed, the function will fail.
- When the option VIX_INSTALLTOOLS_AUTO_UPGRADE is used on virtual machine with a Windows guest operating system, the upgrade process may cause the Windows guest to perform a controlled reset in order to load new device drivers. If you intend to perform additional guest operations after upgrading the VMware Tools, it is recommanded that after this task completes, that the guest be reset using VixVM_Reset() with the VIX_VMPOWEROP_FROM_GUEST flag, followed by calling VixVM_WaitForToolsInGuest() to ensure that the guest has reached a stable state.
- If the option VIX_INSTALLTOOLS_AUTO_UPGRADE is provided and the newest version of tools is already installed, the function will return VIX_OK. Some older versions of Vix may return VIX_E_TOOLS_INSTALL_ALREADY_UP_TO_DATE.
- If the VIX_INSTALLTOOLS_RETURN_IMMEDIATELY flag is set, this function will report completion to the job handle immediately after mounting the VMware Tools ISO image.
- If the VIX_INSTALLTOOLS_RETURN_IMMEDIATELY flag is not set for an ESX host, this function will report completion to the job handle immediately after mounting the VMware Tools ISO image.
- If the VIX_INSTALLTOOLS_RETURN_IMMEDIATELY flag is not set for a WS host, this function will report completion to the job handle only after the installation successfully completes or is cancelled.
- The virtual machine must be powered on to do this operation.
- If the Workstation installer calls for an ISO file that is not downloaded, this function returns an error, rather than attempting to download the ISO file.

# Side Effects

None.

# Requirements

vix.h, since VMware Server 1.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);
    // Power on the virtual machine before copying file.
    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);

    // Install VMware Tools in running virtual machine.
    jobHandle = VixVM_InstallTools(vmHandle,
                                   VIX_INSTALLTOOLS_MOUNT_TOOLS_INSTALLER, // options
                                   NULL, // commandLineArgs
                                   NULL, // callbackProc
                                   NULL); // clientData

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

    jobHandle = VixVM_PowerOff(vmHandle,
                               0, // powerOffOptions
                               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-2018 VMware, Inc. All rights reserved.