2015-07-15 2 views
0

Итак, у меня возникла проблема с запуском виртуальной машины Windows XP с помощью программы C#. Команда, которую я использую, - vmwindow -file "absolute path to vmcx file ", но проблема в том, что команда не работает с подсказкой cmd, которую запускает моя программа. Так что это очень странно. Я могу перейти в командную строку на своем компьютере и запустить эту команду на мой компьютер и он работает, но если у меня есть одна и та же команда в моей программе C#, появившаяся подсказка подсказывает, что «vmwindow» не является распознанной командой. Я даже смотрел пути каждой командной строки, и они 're different, но они все еще содержат «C: \ Windows \ system32 \», где существует vmwindow.exe. Итак, я перемещаюсь в окне командной строки, которое заполняет моя программа, и файла «vmwindow.exe» нет , но если я открою окно командной строки с моего компьютера и перейду к этой папке, он там существует. Я не могу думать ни о чем другом, поскольку я уже убедился, что они оба работают в режиме администратора, а также я попытался запустить bat-файл, который содержал эту команду, вместо того, чтобы запускать команду напрямую. знает об этом. Вот код, который я использую:Запуск vm «Режим Windows XP» программно с помощью программы C# Windows 7

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(); 
    } 
+0

Программа (имя файла) должна быть 'vmwindow.exe', а не cmd.exe. Аргументами являются все после 'vmwindow' в вашем примере. –

+0

Хорошо, я попробовал это, и он дал мне это: Необработанное исключение типа «System.ComponentModel.Win32Exception» произошло в System.dll Дополнительная информация: Система не может найти указанный файл. Я чувствую, что это связано с окном командной строки, не находящим vmwindow.exe, когда я перехожу к этой папке в окне командной строки, которое заполняется визуальной студией. – user1919646

+0

Вам нужно указать полный путь к 'vmwindow.exe'. –

ответ

0

Возможно, это из-за настройки битов, с которой вы скомпилируете свою программу. («Платформа целевой» и «Предпочитайте 32-разрядные» настройки на вкладке «Сборка» проекта). 32 и 64-битные процессы видят разные файлы в System32. См. https://stackoverflow.com/a/950011

+0

Да, попробовал это, и это работает. Теперь я начинаю свой vm. Я изменил цель платформы на «x64», которая автоматически отключила настройку «Предпочитаю 32-бит», и теперь она работает. Благодаря!! – user1919646

0

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

Вы можете увидеть все HV-командлеты 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"); 
} 
Смежные вопросы