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

StackOverflow https://stackoverflow.com/questions/383768

  •  23-08-2019
  •  | 
  •  

Вопрос

Я использую 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.

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

Спасибо,

Арни

Это было полезно?

Решение

Быстрая информация о ситуации.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top