2008-12-20 11 views
1

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.API VMware VIX La méthode FindItems() ne renvoie jamais lors de l'interrogation de machines virtuelles enregistrées

Le code que je utilise est la suivante:

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 32 bits, donc je me suis assuré que l'application de test est compilé en 32 bits. J'ai également vérifié que tous les services VMware sont en cours d'exécution.

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

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

Des idées sur ce qui pourrait être à l'origine de cela?

Merci,

Arnie

Répondre

1

mise à jour rapide sur la situation.

J'ai regardé de plus près le official documentation pour la méthode FindItems(). La constante VIX_FIND_REGISTERED_VMS n'est pas répertoriée en tant que paramètre pris en charge - seule la constante VIX_FIND_RUNNING_VMS l'est. Je suppose que cela signifie que l'API VIX ne permet actuellement pas 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 vais devoir attendre jusqu'à ce que la prochaine version de l'API VIX soit publiée.

Questions connexes