La méthode FindItems() de l'API VMware VIX ne revient jamais lors d'une requête pour les machines virtuelles enregistrées

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

  •  23-08-2019
  •  | 
  •  

Question

J'utilise VMware Workstation 6.5 sur Windows Vista x64.J'essaie d'écrire du code C# qui utilise l'API COM VMware Vix v1.6.1 pour obtenir une liste des machines virtuelles enregistrées.

Le code que j'utilise est le suivant :

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
    }
}

Je suis conscient que la DLL COM est en 32 bits, je me suis donc assuré que l'application de test est compilée en 32 bits.Je me suis également assuré que tous les services VMware sont en cours d'exécution.

Il n'y a aucune exception levée, aucune erreur renvoyée (pour autant que je sache) et aucun événement écrit dans le journal des événements.

Curieusement, le code ci-dessus fonctionne lorsque j'essaie d'obtenir une liste des machines virtuelles en cours d'exécution à l'aide de la constante VIX_FIND_RUNNING_VMS.

Des idées sur ce qui pourrait causer cela ?

Merci,

Arnie

Était-ce utile?

La solution

Petit point sur la situation.

J'ai regardé de plus près le documentation officielle pour la méthode FindItems().La constante VIX_FIND_REGISTERED_VMS n'est pas répertoriée comme paramètre pris en charge - seule la constante VIX_FIND_RUNNING_VMS l'est.

Je suppose que cela signifie qu'actuellement, l'API VIX n'offre aucun moyen d'obtenir une liste des machines virtuelles enregistrées sur une instance VMware Workstation.

Cela expliquerait également pourquoi l'utilitaire de ligne de commande vmrun.exe n'offre aucun moyen d'obtenir des machines virtuelles enregistrées.

Je suppose que je devrai simplement attendre la sortie de la prochaine version de l'API VIX.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top