本文簡單的介紹如何使用VMware Vix API來控制Vmware虛擬機
什么是VM VIX
VM Vix是Vmware提供的一組API接口來操作虛擬機的一系列行為,其可以幫助我們完成很多軟件系統的自動化工作,可以以控制系統的方式來實現某些特殊軟件的自動化運行
官網: https://www.vmware.com/support/developer/vix-api/
在線文檔: https://www.vmware.com/support/developer/vix-api/vix113_reference/
獲取VMware Vix SDK
一.百度搜索VMware Vix

二.下載VMware Vix SDK

然后出現

四.然后下載安裝即可,安裝完畢如下所示

如何使用
函數文檔(在SDK的此目錄下VMware VIX\doc\lang\c\functions)

注意自己虛擬機的版本

在工程中包含相應的頭文件和庫

實例代碼
下面是一個開啟虛擬機並關閉虛擬機的代碼
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include "vix.h"
#pragma comment(lib,"vix.lib")
#pragma comment(lib,"vixd.lib")
#define CONNTYPE VIX_SERVICEPROVIDER_VMWARE_WORKSTATION
#define HOSTNAME ""
#define HOSTPORT 0
#define USERNAME ""
#define PASSWORD ""
#define VMPOWEROPTIONS VIX_VMPOWEROP_LAUNCH_GUI
int main()
{
VixError err;
char *vmxPath="E:\\vm\\Windows XP AVG\\Windows XP AVG.vmx";
VixHandle hostHandle = VIX_INVALID_HANDLE;
VixHandle jobHandle = VIX_INVALID_HANDLE;
VixHandle vmHandle = VIX_INVALID_HANDLE;
jobHandle = VixHost_Connect(VIX_API_VERSION,
CONNTYPE,
HOSTNAME, // *hostName,
HOSTPORT, // hostPort,
USERNAME, // *userName,
PASSWORD, // *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_FAILED(err))
{
goto abort;
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VIX_INVALID_HANDLE;
jobHandle = VixVM_Open(hostHandle,
vmxPath,
NULL, // VixEventProc *callbackProc,
NULL); // void *clientData);
err = VixJob_Wait(jobHandle,
VIX_PROPERTY_JOB_RESULT_HANDLE,
&vmHandle,
VIX_PROPERTY_NONE);
if (VIX_FAILED(err))
{
printf("VM_Open error\n");
goto abort;
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VixVM_PowerOn(vmHandle,
VMPOWEROPTIONS,
VIX_INVALID_HANDLE,
NULL, // *callbackProc,
NULL); // *clientData);
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_FAILED(err))
{
goto abort;
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VixVM_PowerOff(vmHandle,
VIX_VMPOWEROP_NORMAL,
NULL, // *callbackProc,
NULL); // *clientData);
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_FAILED(err))
{
goto abort;
}
abort:
Vix_ReleaseHandle(jobHandle);
Vix_ReleaseHandle(vmHandle);
VixHost_Disconnect(hostHandle);
return 0;
}
