我在Windows Vista x64上使用VMware Workstation 6.5。我正在尝试编写一些使用VMware Vixv1.6.1comAPI的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列表时,上面的代码可以正常工作。
你知道这是什么原因造成的吗?
谢谢,
阿尼
发布于 2008-12-21 17:18:28
情况的快速更新。
我仔细研究了FindItems()方法的official documentation。Constant VIX_FIND_REGISTERED_VMS不作为支持的参数列出-只有constant VIX_FIND_RUNNING_VMS作为支持的参数列出。
我的猜测是,这意味着目前VIX没有提供获取在VMware工作站实例上注册的VM列表的方法。
这也解释了为什么vmrun.exe命令行实用程序不提供获取已注册VM的方法。
我想我只能等到VIX API的下一个版本发布。
https://stackoverflow.com/questions/383768
复制相似问题