Я использую 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.
Есть идеи о том, что может быть причиной этого?
Спасибо
Арни