Запуск виртуальной машины "Режим Windows XP" программно через программу C# Windows 7

Итак, у меня проблема с запуском виртуальной машины в режиме Windows XP через программу aC#. Я использую команду 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();
    }

2 ответа

Решение

Вероятно, это из-за настройки битности, с которой вы компилируете свою программу. (Настройки "Цель платформы" и "Предпочитать 32-битные" на вкладке "Сборка" проекта). 32 и 64-битные процессы видят разные файлы в System32. Смотрите /questions/24246969/pochemu-64-razryadnyie-biblioteki-dll-idut-v-system32-a-32-razryadnyie-biblioteki-v-syswow64-v-64-razryadnyih-sistemah-windows/24246982#24246982

Что вы можете сделать, это использовать Powershell. Он имеет встроенную интеграцию для управления Hyper V и легко вызывается из C#

Вы можете увидеть все HV-командлеты здесь

простая команда для запуска вашей машины будет

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");
}
Другие вопросы по тегам