Для тих, хто може зіткнутися з цією проблемою з останніми змінами на вашому комп’ютері, пов’язаними з Hyper-V, вам потрібно буде відключити його під час використання VMWare або VirtualBox. Вони не працюють разом. Windows Sandbox та WSL 2 потребують включеного Hyper-V Hypervisor, який наразі порушує VMWare. По суті, вам потрібно буде виконати такі команди, щоб увімкнути / вимкнути послуги Hyper-V при наступному перезавантаженні.
Щоб відключити Hyper-V і примусити VMWare працювати, в PowerShell як адміністраторі:
bcdedit /set hypervisorlaunchtype off
Щоб знову ввімкнути Hyper-V і зламати VMWare зараз, в PowerShell як адміністраторі:
bcdedit /set hypervisorlaunchtype auto
Після цього вам потрібно буде перезавантажити. Я написав сценарій PowerShell, який змінить це для вас і підтвердить його за допомогою діалогових вікон. Він навіть самостійно піднімається до адміністратора за допомогою цієї методики, так що ви можете просто клацнути правою кнопкою миші та запустити сценарій, щоб швидко змінити режим Hyper-V. Це можна легко змінити, щоб перезавантажити і для вас, але я особисто не хотів, щоб це сталося. Збережіть це як hypervisor.ps1 і переконайтеся, що ви запустили, Set-ExecutionPolicy RemoteSigned
щоб ви могли запускати сценарії PowerShell.
# Get the ID and security principal of the current user account
$myWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent();
$myWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($myWindowsID);
# Get the security principal for the administrator role
$adminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator;
# Check to see if we are currently running as an administrator
if ($myWindowsPrincipal.IsInRole($adminRole))
{
# We are running as an administrator, so change the title and background colour to indicate this
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)";
$Host.UI.RawUI.BackgroundColor = "DarkBlue";
Clear-Host;
}
else {
# We are not running as an administrator, so relaunch as administrator
# Create a new process object that starts PowerShell
$newProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell";
# Specify the current script path and name as a parameter with added scope and support for scripts with spaces in it's path
$newProcess.Arguments = "-windowstyle hidden & '" + $script:MyInvocation.MyCommand.Path + "'"
# Indicate that the process should be elevated
$newProcess.Verb = "runas";
# Start the new process
[System.Diagnostics.Process]::Start($newProcess);
# Exit from the current, unelevated, process
Exit;
}
Add-Type -AssemblyName System.Windows.Forms
$state = bcdedit /enum | Select-String -Pattern 'hypervisorlaunchtype\s*(\w+)\s*'
if ($state.matches.groups[1].ToString() -eq "Off"){
$UserResponse= [System.Windows.Forms.MessageBox]::Show("Enable Hyper-V?" , "Hypervisor" , 4)
if ($UserResponse -eq "YES" )
{
bcdedit /set hypervisorlaunchtype auto
[System.Windows.Forms.MessageBox]::Show("Enabled Hyper-V. Reboot to apply." , "Hypervisor")
}
else
{
[System.Windows.Forms.MessageBox]::Show("No change was made." , "Hypervisor")
exit
}
} else {
$UserResponse= [System.Windows.Forms.MessageBox]::Show("Disable Hyper-V?" , "Hypervisor" , 4)
if ($UserResponse -eq "YES" )
{
bcdedit /set hypervisorlaunchtype off
[System.Windows.Forms.MessageBox]::Show("Disabled Hyper-V. Reboot to apply." , "Hypervisor")
}
else
{
[System.Windows.Forms.MessageBox]::Show("No change was made." , "Hypervisor")
exit
}
}