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

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

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

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

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

Спасибо

Арни

1 Ответ

1 голос
/ 21 декабря 2008

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

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

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

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

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

...