複数の VMware マシンがあります。それらはすべてWindowsサーバーを実行しており、コピーしてダブルクリックして実行するのではなく、VirtualBox SDKのようにVMware APIを使用して、これらすべてのマシンでプログラムを実行したいと考えています。
VMware API に、プログラムを実行するように VMware マシンに指示できる機能はありますか?
複数の VMware マシンがあります。それらはすべてWindowsサーバーを実行しており、コピーしてダブルクリックして実行するのではなく、VirtualBox SDKのようにVMware APIを使用して、これらすべてのマシンでプログラムを実行したいと考えています。
VMware API に、プログラムを実行するように VMware マシンに指示できる機能はありますか?
VMware APIのドキュメントで報告されているように、必要な関数はVixVM_RunProgramInGuest()
であり、ゲスト OS (仮想マシンで実行されている OS) で を使用して認証する必要がありますVixVM_LoginInGuest()
。
ドキュメントには、ゲスト OS でプログラムを呼び出す方法の例があります。これは、仮想マシン サーバーに接続し、仮想マシンを定義するファイルを開き、電源を入れる方法を示す完全な例です。重要なコードは次のとおりです。ただし、完全な例を読む必要があります。
// 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);