Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Windows-program kan nu skapa och interagera med Linux-processer som körs i Windows-undersystemet för Linux (WSL) med WSL-plugin-program. Den här artikeln ger en översikt över hur de fungerar och hur du kommer igång med dem.
Förstå plugin-funktioner
WSL-plugin-program tillhandahåller följande kärnfunktioner:
- Tillåter att program anger en körbar Windows-fil som startar när den virtuella WSL-datorn startas
- Den körbara Windows-filen kan skapa Linux-processer i WSL och kan kommunicera direkt med dem med hjälp av en virtualiserad socket
Med dessa kan Windows-program bygga på WSL-funktioner och tillhandahålla ytterligare funktioner relaterade till Windows-undersystemet för Linux.
Installera ett plugin-program
Som skapare av WSL-plugin-program kan du installera plugin-programmet på en dator genom att ange en registernyckel så att den pekar på plugin-programmets DLL-fil.
Och som WSL-användare installerar alla program som du använder automatiskt WSL-plugin-program som en del av deras normala installationsprocess.
Skapa ett eget plugin-program
För att starta ett plugin-projekt måste du skapa en Win32-dll. Det enklaste sättet att konfigurera detta är att prova vårt exempelprojekt för WSL-plugin-programmet. Du kan göra detta genom att klona WSL-exempellagringsplatsen för plugin-programmet till en lokal mapp med git clone och öppna den i Visual Studio.
När du öppnar projektet navigerar du till dllmain.cpp filen så visas listan över funktioner som är tillgängliga för WSL-plugin-program.
Du kan sedan trycka på fliken "Skapa" och skapa projektet, vilket ger en DLL som du kan använda, troligen under wsl-plugin-sample\x64\Debug\WSLPluginSample.dll.
Testa plugin-programmet
WSL-plugin-program körs endast om de är digitalt signerade. För att testa detta måste du aktivera testsignering på datorn.
Aktivera testsignering och skapa en testcertifiering
Öppna ett upphöjt PowerShell-fönster och aktivera testsignering genom att köra det här kommandot:
## If this command results in "The value is protected by Secure Boot policy and cannot be modified or deleted"
## Then reboot the PC, go into BIOS settings, and disable Secure Boot. BitLocker may also affect your ability to modify this setting.
Bcdedit.exe -set TESTSIGNING ON
När testsignering har aktiverats (en omstart kan krävas) skapar vi ett WSL-testcertifikat i en upphöjd PowerShell-kommandotolk som finns i katalogen för din WSLPluginSample.dll fil som skapades ovan:
# Create the cert
$certname = "WSLPluginTestCert"
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256 -Type CodeSigningCert
# Export it to a local path
Export-Certificate -Cert $cert -FilePath ".\$certname.cer"
# Sign the DLL file
Set-AuthenticodeSignature -FilePath "C:\dev\Path\To\Your\WSLPlugin.dll" -Certificate $cert
Importera certifikatet senast till den betrodda rotcertifikatutfärdare:
Import-Certificate -FilePath ".\$certname.cer" -CertStoreLocation Cert:\LocalMachine\Root"
Mer information finns på sidan om hur du skapar ett självsignerat certifikatdokument .
Installera plugin-programmet
I samma upphöjda PowerShell-fönster kör du kommandot nedan för att installera plugin-programmet och se till att ändra sökvägen till plugin-DLL:en till din befintliga sökväg:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\Plugins" -Name "demo-plugin" -Value "C:\Path\to\plugin.dll" -Force
Om du vill använda plugin-programmet startar du om wsl-tjänsten via:
Stop-Service -Name "wslservice" -Force
wsl.exe echo "test"
Plugin-programmet bör nu läsas in. Mer information om plugin-programmet kunde inte läsas in finns i avsnittet Felsökning och ytterligare information .
Och när du är klar kan du köra det här kommandot för att ta bort plugin-programmet (kom ihåg att du måste starta om WSL-tjänsten för att den ska börja gälla):
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\Plugins" -Name "demo-plugin" -Force
Felsökning och ytterligare information
Vanliga felkoder:
- Wsl/Service/CreateInstance/CreateVm/Plugin/ERROR_MOD_NOT_FOUND –> Det gick inte att läsa in plugin-DLL:n. Kontrollera att registreringssökvägen för plugin-programmet är korrekt
- Wsl/Service/CreateInstance/CreateVm/Plugin/TRUST_E_NOSIGNATURE –> Plugin-DLL:n är inte signerad eller så är dess signatur inte betrodd av datorn
- Wsl/Service/CreateInstance/CreateVm/Plugin/* –> Plugin-DLL:n returnerade ett fel i WSLPLUGINAPI_ENTRYPOINTV1 eller OnVmStarted()
- Wsl/Service/CreateInstance/Plugin/* –> Plugin-DLL:n returnerade ett fel i OnDistributionStarted()
Plugins Linux-användarutrymme
Linux-processer som skapas via ExecuteBinary() körs i rotnamnområdet för den virtuella WSL2-datorn. Det här namnområdet är inte associerat med någon distribution och har ett mycket minimalt Mariner-baserat rotfilsystem.
Filsystemet är en skrivbar tmpfs, vilket innebär att alla ändringar som görs i det tas bort när den virtuella WSL2-datorn stängs av.
Du kan kontrollera innehållet i rotnamnområdet genom att köra wsl --debug-shell medan WSL körs.
Ytterligare överväganden
- Alla WSL-plugin-krokar är synkrona, vilket innebär att WSL väntar på att plugin-krokarna ska slutföras innan du fortsätter.
- Alla fel som returneras av ett plugin-program anses vara allvarliga av WSL (vilket innebär att användarens distribution inte startar)
- Plugin-koden körs i samma adressutrymme som WSL-tjänsten. Alla krascher i ett plugin-program kraschar hela WSL-tjänsten, vilket kan orsaka dataförlust
Windows Subsystem for Linux