This application cannot run under a virtual machine — варианты решения

Как исправить ошибку this application cannot run under a virtual machineПри запуске программ в Windows 11 и 10, даже в обычной ОС, а не в виртуальной машине, некоторые пользователи могут столкнуться с сообщением об ошибке: «Sorry, this application cannot run under a virtual machine» (Программа не может быть запущена на виртуальной машине).

В этой инструкции подробно о способах исправить ситуацию как в случае, если запуск производится в обычной системе, так и варианты для запуска в VMware или VirtualBox.

Решение при запуске в Windows 11 и 10 на физическом компьютере

Если вы получаете сообщение об ошибке «Sorry, this application cannot run under a virtual machine» при запуске какой-либо программы в рамках обычной системы, запущенной на физическом компьютере, с большой вероятностью причина — в неправильном определении окружения в самой программе из-за встроенных функций Windows 11/10, активно использующих виртуализацию.

Чаще всего речь идет об играх с анти-читом, финансовом ПО и некотором специализированном софте.

Варианты решения, которые срабатывают в большинстве случаев:

  1. Отключите компоненты Hyper-V и Платформы виртуальной машины, если они присутствуют: нажмите клавиши Win+R на клавиатуре, введите optionalfeatures и нажмите Enter. При наличии включенных пунктов «Hyper-V», «Платформа виртуальной машины» (Virtual Machine Platform), Платформа низкоуровневой оболочки Windows (Windows Hypervisor Platform), «Песочница Windows» (Windows Sandbox), «Подсистема Windows для Linux» (Windows Subsystem for Linux) отключите их, нажмите «Ок», дождитесь применения изменений и обязательно перезагрузите компьютер.Отключение всех компонентов Hyper-V
  2. Те же действия, но в командной строке, запущенной от имени администратора:
    dism.exe /Online /Disable-Feature /FeatureName:Microsoft-Hyper-V-All
    dism.exe /Online /Disable-Feature /FeatureName:VirtualMachinePlatform

    Перезагрузка компьютера после выполнения действия (не завершение работы и включение, а именно перезагрузка) обязательна.

  3. Ещё один вариант в командной строке, который просто отключает старт гипервизора после следующей перезагрузки:
    bcdedit /set hypervisorlaunchtype off
  4. Если ни один из предыдущих шагов не сработал, попробуйте отключить функции изоляции ядра и целостности памяти. Действие выполняется в окне «Безопасность Windows» в разделе «Безопасность устройства» — «Изоляция ядра» — «Сведения об изоляции ядра» с помощью переключателя «Целостность памяти». После изменения обязательно перезагрузите компьютер.Отключение изоляции ядра в Windows

В большинстве случаев один из предложенных выше вариантов помогает решить проблему. Если же нет, несколько альтернативных вариантов (перед выполнением 2-го пункта рекомендую создать точку восстановления системы):

  • Попробуйте отключить виртуализацию в БИОС/UEFI. На сайте есть инструкция о включении, сделайте наоборот. Задача — найти и отключить опцию Intel Virtualization Technology (VT-x)AMD-V или SVM Mode (Secure Virtual Machine).
  • При наличии каких-либо программ, использующих виртуализацию (виртуальные машины, песочницы антивирусов, эмуляторы), попробуйте их удалить.
  • Попробуйте отключить Virtualization Based Security в реестре. Откройте редактор реестра (Win+R — regedit). В разделе реестра
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard

    при наличии параметра EnableVirtualizationBasedSecurity установите его значение равным 0, а если в подразделе Scenarios — HypervisorEnforcedCodeIntegrity присутствует параметр Enabled со значением 1, измените его на 0 и перезагрузите компьютер.Отключение Virtualization Based Security в реестре

  • Если ранее всё работало исправно, а теперь — нет, попробуйте использовать точки восстановления системы на дату, когда проблема не наблюдалась.

Выполнение в виртуальной машине

Если вам требуется запустить такую программу в рамках виртуальной машины, учитывайте, что сработать это может далеко не всегда: методы проверки в разных программах отличаются — для некоторых из них способы могут сработать, для других — нет.

Прежде чем приступать, создайте снимок виртуальной машины (Snapshot) чтобы откатиться к предыдущему состоянию если что-то пойдет не так. Учитывайте, что методы — под вашу ответственность, не выполняйте если не уверены.

В VirtualBox: в командной строке (на хосте) перейдите к папке, где находится VBoxManage, обычно и выполните скрытие идентификатора CPU и других характеристик «железа». Обычно порядок команд следующий:

cd C:\Program Files\Oracle\VirtualBox\
VBoxManage modifyvm "Имя_ВМ" --cpuidset 00000001 00010676 00000800 80000201 00000000
VBoxManage modifyvm "Имя_ВМ" --dmi-system-product "System Product Name"
VBoxManage modifyvm "Имя_ВМ" --dmi-system-version "System Version"
VBoxManage modifyvm "Имя_ВМ" --dmi-system-serial "System Serial Number"
VBoxManage modifyvm "Имя_ВМ" --dmi-system-uuid "СЛУЧАЙНЫЙ UUID"
VBoxManage modifyvm "Имя_ВМ" --dmi-board-product "Модель материнской платы"
VBoxManage modifyvm "Имя_ВМ" --dmi-board-version "rev. 1.0"
VBoxManage modifyvm "Имя_ВМ" --dmi-board-serial "123456789"
VBoxManage modifyvm "Имя_ВМ" --dmi-chassis-asset-tag "No Asset Tag"

Случайный UUID в правильном формате можно сгенерировать онлайн.

Помимо указанных пунктов, может потребоваться отключение (удаление) гостевых компонентов VirtualBox (Guest Additions), записей в реестре гостевой ОС, содержащих VBox или VirtualBox, в частности в разделах:

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services

Для виртуальных машин VMware — выключите виртуальную машину, откройте файл виртуальной машины .vmx в любом текстовом редакторе и добавьте следующие строки в конец файла:

isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
monitor_control.disable_chksimd = "TRUE"
monitor_control.disable_ntreloc = "TRUE"
monitor_control.disable_selfmod = "TRUE"
monitor_control.disable_reloc = "TRUE"
monitor_control.disable_btinout = "TRUE"
monitor_control.disable_btmemspace = "TRUE"
monitor_control.disable_btpriv = "TRUE"
monitor_control.disable_btseg = "TRUE"

И перезапустите виртуальную машину.

Также может помочь изменение записи (удаление VMWare) в разделе реестра

HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum

в гостевой ОС, но учитывайте, что этот параметр перезаписывается при каждой перезагрузке гостевой системы.

Возможно, у кого-то из читателей есть собственные, дополнительные решения. Будет отлично, если вы сможете поделиться ими в комментариях ниже.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *