2012-08-24 50 views
-1

我有多台VMware机器;他们都运行Windows服务器,并且我希望在所有这些机器上运行程序,而不是通过复制和双击执行,而是像使用VirtualBox SDK一样使用一些VMware API来执行此操作。以编程方式在VMware机器上执行程序

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

+4

你看过吗? http://www.vmware.com/support/developer/prog-api/ – Nifle

回答

4

如在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); 
相关问题