本文簡單的介紹如何使用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; }