【发布时间】:2012-08-27 07:16:03
【问题描述】:
我有多台 VMware 机器;他们都在运行 Windows 服务器,我想在所有这些机器上运行一个程序,不是通过复制和双击执行,而是通过使用一些 VMware API 来做到这一点,就像 VirtualBox SDK 一样。
VMware API 中是否有任何函数可以让我告诉 VMware 机器执行程序?
【问题讨论】:
标签: vmware vmware-workstation vmware-server
我有多台 VMware 机器;他们都在运行 Windows 服务器,我想在所有这些机器上运行一个程序,不是通过复制和双击执行,而是通过使用一些 VMware API 来做到这一点,就像 VirtualBox SDK 一样。
VMware API 中是否有任何函数可以让我告诉 VMware 机器执行程序?
【问题讨论】:
标签: vmware vmware-workstation vmware-server
正如documentation of the VMware API 中所报告的,您需要的功能是VixVM_RunProgramInGuest(),这需要您使用VixVM_LoginInGuest() 在来宾操作系统(虚拟机上运行的操作系统)上进行身份验证。
文档中有一个关于如何在客户操作系统中调用程序的示例;这是一个完整的示例,展示了如何连接到虚拟机服务器、打开定义虚拟机的文件并打开它的电源。基本代码如下;不过,您应该阅读完整的示例。
// Authenticate for guest operations.
jobHandle = VixVM_LoginInGuest(vmHandle,
"vixuser", // userName
"secret", // password
0, // options
NULL, // callbackProc
NULL // clientData
);
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error.
goto abort;
}
Vix_ReleaseHandle(jobHandle);
// Run the target program.
jobHandle = VixVM_RunProgramInGuest(vmHandle,
"c:\\myProgram.exe",
"/flag arg1 arg2",
0, // options
VIX_INVALID_HANDLE, // propertyListHandle
NULL, // callbackProc
NULL // clientData
);
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_OK != err) {
// Handle the error.
goto abort;
}
Vix_ReleaseHandle(jobHandle);
连接虚拟机服务器的部分如下。
jobHandle = VixHost_Connect(VIX_API_VERSION,
VIX_SERVICEPROVIDER_VMWARE_SERVER,
NULL, // hostName
0, // hostPort
NULL, // userName
NULL, // 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) {
// Handle the error.
goto abort;
}
Vix_ReleaseHandle(jobHandle);
【讨论】: