WMI を使用して Windows 8 システムのエクスポートから Hyper-V システム定義をロードしようとしています。これまでのところ、私はこれを持っています:
var managementScope = new ManagementScope(@"root\virtualization\v2");
var invokeMethodOptions = new InvokeMethodOptions();
invokeMethodOptions.Timeout = new TimeSpan(0, 0, 10);
using (var managementService = WmiUtilities.GetVirtualMachineManagementService(managementScope)) {
var inParameters = managementService.GetMethodParameters(@"ImportSystemDefinition");
inParameters["SystemDefinitionFile"] = filePath;
inParameters["SnapshotFolder"] = snapshotPath;
inParameters["GenerateNewSystemIdentifier"] = false;
ManagementBaseObject outParameters = managementService.InvokeMethod(@"ImportSystemDefinition", inParameters, invokeMethodOptions);
foreach (var value in outParameters.Properties) {
Console.WriteLine("{0}: {1}", value.Name, value.Value);
}
return (ManagementBaseObject) outParameters["ImportedSystem"];
}
これを実行すると4096
、ジョブが正常に開始されたことを示すリターン コードが返され、ジョブの値が返されます。たとえば、次のようになります。
ImportedSystem:
Job: \\COREI7\root\virtualization\v2:Msvm_ConcreteJob.InstanceID="B1DC90B6-14A1-42C0-924E-225660E6EC98"
ReturnValue: 4096
次の質問があります。
- このメソッドを同期的に実行することは可能ですか? どうすればそれを伝えることができますか? http://msdn.microsoft.com/en-us/library/hh850082(v=vs.85).aspxの MSDN ドキュメントは、それが可能であることを示唆しています (「操作が同期的に完了する場合」)。 . 私の推測では、これはメソッドを同期的に実行する方法に関する一般的な WMI の質問であり、その方法を見つけることができないようです。
- 非同期を強制されている場合、その特定のジョブを監視するにはどうすればよいですか? 私が見つけたものはすべて、プロセス イベントまたはイベント ログ イベントの監視に関するものですが、これらはどちらも私が対象としている特定の WQL イベントであり、一般的なジョブ イベントではないようです。
これらの質問が基本的すぎる場合は申し訳ありませんが、答えを見つけることができません。
ありがとう!
[編集]ManagementOperationObserver
いつ完了したかを教えてくれる a を追加することを検討していますが、とにかくそうしているように見えるのに、なぜ非同期にする必要があるのか は明らかではありません。