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