1

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 のリストを取得しようとすると、上記のコードが機能します。

これを引き起こしている可能性のあるアイデアはありますか?

ありがとう、

アーニー

4

1 に答える 1

1

状況のクイック更新。

FindItems() メソッドの公式ドキュメントを詳しく調べました。定数 VIX_FIND_REGISTERED_VMS は、サポートされているパラメーターとしてリストされていません。定数 VIX_FIND_RUNNING_VMS のみがサポートされています。

これは、現在 VIX API が VMware Workstation インスタンスに登録されている VM のリストを取得する方法を提供していないことを意味していると思います。

これは、vmrun.exe コマンドライン ユーティリティが登録された VM を取得する方法を提供しない理由も説明します。

VIX API の次のバージョンがリリースされるまで待つ必要があると思います。

于 2008-12-21T17:18:27.557 に答える