本文简单的介绍如何使用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; }