Метод VMware VIX API FindItems () никогда не возвращается при запросе зарегистрированных виртуальных машин

Я использую VMware Workstation 6.5 в Windows Vista x64. Я пытаюсь написать код C #, который использует COM API VMware Vix v1.6.1 для получения списка зарегистрированных виртуальных машин.

Я использую следующий код:

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-библиотека является 32-битной, поэтому я убедился, что тестовое приложение скомпилировано как 32-битное. Также я убедился, что все сервисы VMware запущены.

Никаких исключений, ошибок (насколько я понимаю) и событий, записываемых в журнал событий, не происходит.

Как ни странно, приведенный выше код работает, когда я пытаюсь получить список запущенных виртуальных машин, используя константу VIX_FIND_RUNNING_VMS.

Есть идеи о том, что может быть причиной этого?

Спасибо,

Арни


person Arnold Zokas    schedule 20.12.2008    source источник


Ответы (1)


Быстрое обновление ситуации.

Я внимательно изучил официальную документацию для метода FindItems (). Константа VIX_FIND_RULL_VMS не указана как поддерживаемый параметр - есть только константа VIX_FIND_RUNNING_VMS.

Я предполагаю, что это означает, что в настоящее время VIX API не предлагает возможности получить список виртуальных машин, зарегистрированных на экземпляре VMware Workstation.

Это также объясняет, почему утилита командной строки vmrun.exe не позволяет получить зарегистрированные виртуальные машины.

Думаю, мне просто нужно дождаться выхода следующей версии VIX API.

person Arnold Zokas    schedule 21.12.2008