通过 C# 程序 Windows 以编程方式启动虚拟机 "Windows XP Mode" 7

Starting a vm "Windows XP Mode" programmatically through a C# program Windows 7

好的,所以我在通过 c# 程序启动 Windows XP 模式 VM 时遇到了问题。我正在使用的命令是 vmwindow -file "absolute path to vmcx file" ,但问题是该命令不适用于我的程序启动的 cmd 提示符。所以,这很奇怪。我可以在我的计算机上转到命令提示符,然后运行 这个命令在我的电脑上运行,但如果我在我的 c# 程序上有相同的命令,弹出的命令提示符告诉我 "vmwindow" 不是可识别的命令。我什至看了看每个命令提示符的路径,它们是不同的,但它们仍然都包含 "C:\Windows\system32\",这是 vmwindow.exe 存在的地方。所以,我在我的程序的命令提示符 window 上导航填充并且文件 "vmwindow.exe" 不存在,但是如果我从我的计算机打开命令提示符 window 并导航到该文件夹​​,它就存在于那里。我想不出其他任何东西,因为我已经做了确保他们都运行宁在管理员模式下,而且我尝试启动一个包含该命令的bat文件而不是直接运行宁命令。希望任何人都知道这件事。这是代码我正在使用:

private void button1_Click(object sender, EventArgs e)
    { 

        Process process = new System.Diagnostics.Process();
        ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();

        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        startInfo.FileName = "cmd.exe";
        startInfo.WorkingDirectory = @"<my path>";
        startInfo.Arguments = "/k vmwindow.exe -file \"<path to vcmx file>\Windows XP Mode.vmcx\"";
        process.StartInfo = startInfo;
        process.Start();
    }

你可以做的是使用Powershell。它具有 Hyper V 控件的本机集成,并且易于 call from c#

您可以看到所有 HV-cmdlets here

启动机器的简单命令是

Start-VM "Windows 8.1 Pro" -Computername HV-Host1
// etcetc
Stop-VM "Windows 8.1 Pro" -Save

所以这在 C# 中应该是这样的

using (PowerShell PowerShellInstance = PowerShell.Create())
{
    PowerShellInstance.AddScript("Start-VM "Windows 8.1 Pro" -Computername HV-Host1");
}

可能是因为您编译程序时使用的位数设置。 ("Platform target" 和 "Prefer 32-bit" 项目的构建选项卡下的设置)。 32 位和 64 位进程在 System32 下看到不同的文件。 参见