需要vix.lib vix.dll ssleay32.dll libeay32.dll vm_basic_types.h vix.h
实现虚拟机的启动、启动内部程序、snapshot、Revert等等
#include "stdafx.h"
#include <stdio.h>
#include "vix.h"
int main(int argc, char * argv[])
{
VixHandle hostHandle = VIX_INVALID_HANDLE;
VixHandle vmHandle = VIX_INVALID_HANDLE;
VixHandle snapshotHandle = VIX_INVALID_HANDLE;
VixHandle jobHandle = VIX_INVALID_HANDLE;
VixError err;
printf("Hostname: ");
printf(argv[1]); //主机IP
printf("\n");
printf("Username: "); //主机账号
printf(argv[2]);
printf("\n");
printf("Password: ");
printf(argv[3]);
printf("\n");
printf("VMPath: "); //虚拟机在主机上的安装目录
printf(argv[4]);
printf("\n");
printf("Guest Username: "); //虚拟机的账号
printf(argv[5]);
printf("\n");
printf("Guest Password: ");
printf(argv[6]);
printf("\n");
printf("Guest Cmd: "); //虚拟机上的可行性文件
printf(argv[7]);
printf("\n");
printf("Guest Options: "); //一些参数
printf(argv[8]);
printf("\n");
// Connect to specified host.
jobHandle = VixHost_Connect(VIX_API_VERSION,
VIX_SERVICEPROVIDER_VMWARE_SERVER,
argv[1], // hostName
0, // hostPort
argv[2], // userName
argv[3], // 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) {
printf("VIX Error on connect in connect: ");
printf(Vix_GetErrorText(err,NULL));
printf("\n");
goto abort;
} else {
//printf("Connected\n");
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VIX_INVALID_HANDLE;
//get handle
jobHandle = VixVM_Open(hostHandle,
argv[4],
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle,
VIX_PROPERTY_JOB_RESULT_HANDLE,
&vmHandle,
VIX_PROPERTY_NONE);
if (VIX_OK != err) {
printf("VIX Error on obtaining handle: ");
printf(Vix_GetErrorText(err,NULL));
printf("\n");
goto abort;
} else {
//printf("Obtained handle\n");
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VIX_INVALID_HANDLE;
//get snapshot
err = VixVM_GetRootSnapshot(vmHandle,
0,
&snapshotHandle);
if(VIX_OK != err) {
printf("VIX Error on obtaining root snapshot: ");
printf(Vix_GetErrorText(err,NULL));
printf("\n");
goto abort;
} else {
//printf("Obtained snapshot\n");
}
//revert snapshot
jobHandle = VixVM_RevertToSnapshot(vmHandle,
snapshotHandle,
0, // options
VIX_INVALID_HANDLE, // propertyListHandle
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if(VIX_OK != err) {
printf("VIX Error on reverting to snapshot: ");
printf(Vix_GetErrorText(err,NULL));
printf("\n");
goto abort;
} else {
//printf("Reverted to snapshot\n");
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VIX_INVALID_HANDLE;
// Wait until guest is completely booted.
jobHandle = VixVM_WaitForToolsInGuest(vmHandle,
60, // timeoutInSeconds
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
printf("VIX Error on waitingForToolsInGuest: ");
printf(Vix_GetErrorText(err,NULL));
printf("\n");
goto abort;
} else {
//printf("Waited for tools in guest\n");
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VIX_INVALID_HANDLE;
//login
jobHandle = VixVM_LoginInGuest(vmHandle,
argv[5], // userName
argv[6], // password
0, // options
NULL, // callbackProc
NULL); // clientData
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
printf("VIX Error on login: ");
printf(Vix_GetErrorText(err,NULL));
printf("\n");
goto abort;
} else {
//printf("Logged into guest\n");
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VIX_INVALID_HANDLE;
//run capture
jobHandle = VixVM_RunProgramInGuest(vmHandle,
argv[7],
argv[8],
VIX_RUNPROGRAM_RETURN_IMMEDIATELY, // options,
VIX_INVALID_HANDLE, // propertyListHandle,
NULL, // callbackProc,
NULL); // clientData
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
printf("VIX Error on run program in guest: ");
printf(Vix_GetErrorText(err,NULL));
printf("\n");
goto abort;
} else {
//printf("Ran program in guest\n");
}
Vix_ReleaseHandle(snapshotHandle);
snapshotHandle = VIX_INVALID_HANDLE;
Vix_ReleaseHandle(vmHandle);
vmHandle = VIX_INVALID_HANDLE;
VixHost_Disconnect(hostHandle);
printf("Disconnected\n");
Vix_ReleaseHandle(hostHandle);
hostHandle = VIX_INVALID_HANDLE;
return 0;
abort:
Vix_ReleaseHandle(jobHandle);
jobHandle = VIX_INVALID_HANDLE;
Vix_ReleaseHandle(snapshotHandle);
snapshotHandle = VIX_INVALID_HANDLE;
Vix_ReleaseHandle(vmHandle);
vmHandle = VIX_INVALID_HANDLE;
VixHost_Disconnect(hostHandle);
printf("E Disconnected\n");
Vix_ReleaseHandle(hostHandle);
hostHandle = VIX_INVALID_HANDLE;
return -1;
}
进入cmd 运行,到VIX.exe中,参数如下:
VIX.exe hostIP hostUsename hostPSW WMPath WMUsername WMPSW WM_RUNProgram Option
说明:Guest Options (arg[8]) 比如当启动IE(对应参数是WM_RUNProgram),那么option 可以作为
url(e.g:www.baidu.com) 这样启动IE 就可打开baidu主页了。
这样就可以启动虚拟机了,并让其执行需要的程序了。