以编程方式在VMware计算机中执行程序

时间:2012-08-24 13:46:06

标签: vmware vmware-workstation vmware-server

我有多台VMware机器;他们都在运行Windows服务器,我想在所有这些机器上运行程序,而不是通过复制和双击执行,而是通过使用一些VMware API来实现,就像VirtualBox SDK一样。

VMware API中是否有任何功能允许我对VMware计算机执行程序?

1 个答案:

答案 0 :(得分:6)

documentation of the VMware API中所述,您需要的功能是VixVM_RunProgramInGuest(),这需要您使用VixVM_LoginInGuest()在来宾操作系统(虚拟机上运行的操作系统)上进行身份验证。< / p>

文档中有一个关于如何在来宾操作系统中调用程序的示例;它是一个完整的示例,显示如何连接到虚拟机服务器,打开定义虚拟机的文件,并启动它。基本代码如下:不过,你应该阅读完整的例子。

// 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);