我在 Windows Vista x64 上使用 VMware Workstation 6.5。我正在尝试编写一些使用 VMware Vix v1.6.1 COM API 来获取已注册虚拟机列表的 C# 代码。
我正在使用的代码如下:
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 获取正在运行的 VM 列表时,上面的代码有效。
关于可能导致这种情况的任何想法?
谢谢,
阿尼