簡體   English   中英

從 WSL 運行 Windows API 函數

[英]Running Windows API functions from WSL

我想知道是否有辦法從 WSL1 或 WSL2 運行 Windows API 函數。 在 WSL2 中聽起來不太可能,因為它使用 Hypervisor 並且不知道 Windows 環境,但也許使用 WSL1?

如果您問是否可以將 Windows API“混合和匹配”到 Linux ELF 二進制文件中,那么不能直接使用,但請參閱下面的解決方法(這可能是您正在尋找的方法)。

使用 Windows API 的 Windows可執行文件在 WSL1 和 WSL2 下都可以正常運行。 引用this SU answer ,這是有效的,因為:

Windows 可執行文件(PE 二進制文件)作為 binfmt_misc 條目添加到 WSL2 中。 簡單來說,binfmt_misc 是一個 Linux 內核特性,它允許識別任意可執行文件格式並將其傳遞給某些程序。

請注意,您確實需要為要運行的 Windows 二進制文件指定.exe 例如, notepad.exe ,而不僅僅是notepad

這種集成足夠深入,您可以使用正常的管道機制在 Linux 和 Windows 之間來回傳遞信息。

因此,假設您正在編寫需要來自 Windows API 的信息的 Linux 代碼,您始終可以生成一個 Windows .exe進程,該進程通過stdout返回所需的信息,並在 Linux 應用程序中捕獲該信息。

這甚至可以從命令行進行。 例如,在bash

np=$(powershell.exe -c "(Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\NetworkProvider\HwOrder\).ProviderOrder")
echo $np
# Returns:  P9NP,RDPNP,LanmanWorkstation,webclient

這將使用進程替換調用 PowerShell。 PowerShell 然后為注冊表項執行 Get-ItemProperty。 當然, $np (網絡提供商)變量設置為結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM