Запуск виртуальной машины "Режим 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");
}