Метод FindItems() API VMware VIX никогда не возвращается при запросе зарегистрированных виртуальных машин
Я использую VMware Workstation 6.5 в Windows Vista x64. Я пытаюсь написать код на C#, который использует VMware Vix v1.6.1 COM API, чтобы получить список зарегистрированных виртуальных машин.
Код, который я использую, выглядит следующим образом:
using System;
using VixCOM;
namespace ConsoleApplication48
{
internal class Program
{
private static void Main()
{
var lib = new VixLibClass();
object results = null;
var job = lib.Connect(Constants.VIX_API_VERSION, Constants.VIX_SERVICEPROVIDER_VMWARE_WORKSTATION, null, 0,
null, null, 0, null, null);
var err = job.Wait(new[] {Constants.VIX_PROPERTY_JOB_RESULT_HANDLE}, ref results);
if (lib.ErrorIndicatesFailure(err))
Console.WriteLine("Error: " + err);
var host = (IHost)((object[])results)[0];
job = host.FindItems(Constants.VIX_FIND_REGISTERED_VMS, null, -1, new DiscoveryCallback(lib));
job.WaitWithoutResults();
host.Disconnect();
}
}
internal class DiscoveryCallback : ICallback
{
protected VixLibClass lib;
public DiscoveryCallback(VixLibClass lib)
{
this.lib = lib;
}
#region ICallback Members
public void OnVixEvent(IJob job, int eventType, IVixHandle moreEventInfo)
{
// this method is never called
}
#endregion
}
}
Я знаю, что COM DLL является 32-разрядным, поэтому я убедился, что тестовое приложение скомпилировано как 32-разрядное. Также я убедился, что все сервисы VMware работают.
Не выдается никаких исключений, не возвращаются ошибки (насколько я вижу) и события не записываются в журнал событий.
Как ни странно, приведенный выше код работает, когда я пытаюсь получить список работающих виртуальных машин, используя константу VIX_FIND_RUNNING_VMS.
Любые идеи о том, что может быть причиной этого?
Спасибо,
Арни
1 ответ
Быстрое обновление ситуации.
Я внимательно посмотрел на официальную документацию по методу FindItems(). Константа VIX_FIND_Rurant_VMS не указана в качестве поддерживаемого параметра - только константа VIX_FIND_RUNNING_VMS.
Я предполагаю, что это означает, что в настоящее время VIX API не предлагает способа получения списка виртуальных машин, зарегистрированных на экземпляре VMware Workstation.
Это также объясняет, почему утилита командной строки vmrun.exe не предлагает способа получения зарегистрированных виртуальных машин.
Думаю, мне просто нужно подождать, пока не выйдет следующая версия VIX API.