【问题标题】:Starting a vm "Windows XP Mode" programmatically through a C# program Windows 7通过 C# 程序 Windows 7 以编程方式启动 vm“Windows XP 模式”
【发布时间】:2015-07-15 14:57:37
【问题描述】:

好的,所以我在通过 c# 程序启动 Windows XP 模式 VM 时遇到了问题。我正在使用的命令是 vmwindow -file "absolute path to vmcx file" ,但问题是该命令不适用于我的程序启动的 cmd 提示符。所以,这很奇怪。我可以在我的计算机上转到命令提示符并运行它我的计算机上的命令并且它可以工作,但是如果我在我的 c# 程序上有相同的命令,弹出的命令提示符告诉我“vmwindow”不是一个可识别的命令。我什至查看了每个命令提示符的路径它们是不同的,但它们仍然包含“C:\Windows\system32\”,这是 vmwindow.exe 所在的位置。所以,我在我的程序填充的命令提示符窗口上导航,文件“vmwindow.exe”是不在那里,但是如果我从计算机打开命令提示符窗口并导航到该文件夹​​,它就存在在那里.我想不出其他任何东西,因为我已经确保它们都在管理员模式下运行,我也试过了启动一个包含该命令的 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();
    }

【问题讨论】:

  • 程序(文件名)应该是vmwindow.exe,而不是cmd.exe。在您的示例中,参数是 vmwindow 之后的所有内容。
  • 好的,我试过了,它给了我这个: System.dll 中发生了“System.ComponentModel.Win32Exception”类型的未处理异常附加信息:系统找不到指定的文件。我觉得这与当我在 Visual Studio 填充的命令提示符窗口中导航到该文件夹​​时,命令提示符窗口找不到 vmwindow.exe 有关。
  • 您需要指定vmwindow.exe的完整路径。
  • 同样的错误。我试过:startInfo.FileName = "C:\\Windows\\system32\\vmwindow.exe";

标签: c# windows virtual-machine xp-mode


【解决方案1】:

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

您可以看到所有 HV-cmdlet 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");
}

【讨论】:

    【解决方案2】:

    可能是因为您编译程序时使用的位数设置。 (项目构建选项卡下的“平台目标”和“首选 32 位”设置)。 32 位和 64 位进程在 System32 下看到不同的文件。 见https://stackoverflow.com/a/950011

    【讨论】:

    • 是的,试过这个,这个工作。它现在正在启动我的虚拟机。我将平台目标更改为“x64”,它自动取消了“首选 32 位”设置,现在它可以工作了。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多