Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置Hyper-V快照';以编程方式命名_C#_Wmi_Snapshot_Hyper V - Fatal编程技术网

C# 设置Hyper-V快照';以编程方式命名

C# 设置Hyper-V快照';以编程方式命名,c#,wmi,snapshot,hyper-v,C#,Wmi,Snapshot,Hyper V,我正在用C#程序创建Hyper-V快照: (注:此代码取自) 有没有办法通过此WMI调用设置快照名称?否则,是否有人知道通过WMI调用重命名快照的有效解决方案?我已经找到了,但它有点模棱两可,不能提供任何解决方案 编辑:解决方案是在创建快照后重命名快照。下面是我使用Hans advice重命名快照的函数: 解决方案: public static bool RenameSnapshot(string vmName, string snapshotName) { v

我正在用C#程序创建Hyper-V快照:

(注:此代码取自)

有没有办法通过此WMI调用设置快照名称?否则,是否有人知道通过WMI调用重命名快照的有效解决方案?我已经找到了,但它有点模棱两可,不能提供任何解决方案

编辑:解决方案是在创建快照后重命名快照。下面是我使用Hans advice重命名快照的函数:

解决方案:

    public static bool RenameSnapshot(string vmName, string snapshotName)
    {

        var result = false;
        var scope = new ManagementScope(@"root\virtualization", null);
        var vm = Utility.GetTargetComputer(vmName, scope);

        // load snapshot
        var objSnapshot = GetLastVirtualSystemSnapshot(vm);

        // rename snapshot
        objSnapshot["ElementName"] = snapshotName;

        // save
        var virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
        var inParams = virtualSystemService.GetMethodParameters("ModifyVirtualSystem");
        inParams["ComputerSystem"] = vm.Path.Path;
        inParams["SystemSettingData"] = objSnapshot.GetText(TextFormat.CimDtd20);
        var outParams = virtualSystemService.InvokeMethod("ModifyVirtualSystem", inParams, null);

        if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
        {
            result = true;
        }
        else
        {
            result = false;
        }



        inParams.Dispose();
        outParams.Dispose();
        vm.Dispose();
        virtualSystemService.Dispose();


        return result;
    }

您必须使用
Msvm\u VirtualSystemManagementService
类的
ModifyVirtualSystem
方法重命名hyper-v快照。有一个关于如何重命名hyper-v虚拟机的示例(您必须修改代码才能重命名快照)。此外,我还发现了如何重命名hyper-v快照。 希望,这有帮助

    public static bool RenameSnapshot(string vmName, string snapshotName)
    {

        var result = false;
        var scope = new ManagementScope(@"root\virtualization", null);
        var vm = Utility.GetTargetComputer(vmName, scope);

        // load snapshot
        var objSnapshot = GetLastVirtualSystemSnapshot(vm);

        // rename snapshot
        objSnapshot["ElementName"] = snapshotName;

        // save
        var virtualSystemService = Utility.GetServiceObject(scope, "Msvm_VirtualSystemManagementService");
        var inParams = virtualSystemService.GetMethodParameters("ModifyVirtualSystem");
        inParams["ComputerSystem"] = vm.Path.Path;
        inParams["SystemSettingData"] = objSnapshot.GetText(TextFormat.CimDtd20);
        var outParams = virtualSystemService.InvokeMethod("ModifyVirtualSystem", inParams, null);

        if ((UInt32)outParams["ReturnValue"] == ReturnCode.Completed)
        {
            result = true;
        }
        else
        {
            result = false;
        }



        inParams.Dispose();
        outParams.Dispose();
        vm.Dispose();
        virtualSystemService.Dispose();


        return result;
    }