1

私のアプリは、Java を使用しているコンピューターで利用可能なすべての復元ポイント (リンク) を一覧表示する必要があります。SystemRestore クラスは、CIMV2 ではなく、デフォルトの名前空間にあります。次のコードを試したとき:

public class TestWMI {
    public static void main(String args[]){
        String host = "localhost";
        String connectStr = String.format("winmgmts:\\\\%s\\root\\default", host);
        String query = "SELECT * FROM SystemRestore";
        ActiveXComponent axWMI = new ActiveXComponent(connectStr);

        Variant vCollection = axWMI.invoke("ExecQuery", new Variant(query));


        EnumVariant enumVariant = new EnumVariant(vCollection.toDispatch());
        Dispatch item = null;
        while (enumVariant.hasMoreElements()) {
            item = enumVariant.nextElement().toDispatch();

            String serviceName = Dispatch.call(item,"Description").toString();
            System.out.println();

        }
    }    
} 

しかし、それは次のエラーで終わります:

Exception in thread "main" com.jacob.com.ComFailException: IEnumVARIANT::Next
    at com.jacob.com.EnumVariant.Next(Native Method)
    at com.jacob.com.EnumVariant.hasMoreElements(EnumVariant.java:68)
    at TestWMI.main(TestWMI.java:28)
Java Result: 1

助けてください。

4

1 に答える 1

0

ここに、このエラーは管理者として実行していないことが原因である可能性があるという投稿があります。

外部データの WMI エイリアスをクエリしても同じエラーが発生する例を次に示しますselect

SELECT Index,InterfaceIndex,SettingID,IpAddress,ServiceName,Description
FROM NICCONFIG
WHERE IPEnabled=true

そのはず:

SELECT Index,InterfaceIndex,SettingID,IpAddress,ServiceName,Description
FROM Win32_NetworkAdapterConfiguration
WHERE IPEnabled=true

外部エイリアス (コマンドラインから) またはフル ネーム (WMI API 呼び出しから)を使用するためのガイドを次に示します。

于 2013-04-30T23:24:24.993 に答える