Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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