看流星社区

 找回密码
 注册账号
查看: 3435|回复: 0

VMware Vix API 操作虚拟机

[复制链接]

该用户从未签到

发表于 2014-7-31 08:56:01 | 显示全部楼层 |阅读模式
mark一下,为了学习VIX API,花了两天时间才搞定,要么编译不过,各种link的lib错误,要么是VixHost_Connect连接不上,要么是VixVM_Open打开失败,今天总算是搞定了,下面是一个示例, 效果是启动VMware的界面并启动虚拟机系统,然后再关机.

#include "stdafx.h"

#include <stdio.h>
#include <stdlib.h>

#include "vix.h"

#pragma comment(lib,"user32.lib")

//#pragma comment(lib,"C:\\Program Files (x86)\\VMware\\VMware VIX\\VixAllProducts.lib")
//#pragma comment(lib,"C:\\Program Files (x86)\\VMware\\VMware VIX\\VixAllProductsd.lib")
//#pragma comment(lib,"C:\\Program Files (x86)\\VMware\\VMware VIX\\VixAllProductsDyn.lib")
#pragma comment(lib,"C:\\Program Files (x86)\\VMware\\VMware VIX\\Workstation-10.0.0-and-vSphere-5.5.0\\32bit\\vix.lib")
#pragma comment(lib,"C:\\Program Files (x86)\\VMware\\VMware VIX\\Workstation-10.0.0-and-vSphere-5.5.0\\32bit\\vixd.lib")
#pragma comment(lib,"ws2_32.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;
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-30 22:41

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表