news 2026/5/14 5:54:13

AI Agent驱动桌面自动化:cua_desktop_operator_skill实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI Agent驱动桌面自动化:cua_desktop_operator_skill实战指南

1. 项目概述:当AI成为你的桌面“第二双手”

如果你每天的工作都离不开Windows桌面,重复地点开某个软件、填写固定的表单、在几个固定的窗口之间来回切换,那你一定想过:“要是能有个助手帮我自动完成这些就好了。” 脚本?太复杂;录制宏?不够灵活;RPA工具?又贵又重。现在,一个名为cua_desktop_operator_skill的开源工具,正在用一种全新的思路解决这个问题:它让一个AI智能体(AI Agent)直接接管你的鼠标和键盘,像真人一样操作你的Windows桌面。这听起来有点像科幻电影里的场景,但它已经是一个可以下载、安装并运行在你本地电脑上的现实工具了。它的核心魅力在于“无代码”和“本地运行”——你不需要懂编程,也不需要将你的操作数据上传到云端,就能实现桌面任务的自动化。无论是处理日常办公流程,还是进行一些复杂的软件交互测试,这个工具都提供了一个极具想象力的起点。接下来,我将从一个实际使用者的角度,为你彻底拆解这个项目,分享从安装配置到实战应用,再到深度定制的完整经验。

2. 核心设计思路:为什么是“AI Agent”驱动桌面自动化?

在深入实操之前,理解cua_desktop_operator_skill背后的设计哲学至关重要。这能帮你判断它是否适合你的场景,以及如何最大化其价值。

2.1 与传统自动化工具的范式差异

传统的桌面自动化,无论是基于坐标点击的“按键精灵”,还是基于图像识别的RPA工具,其本质都是“预编程”或“预录制”。你需要明确告诉工具:第一步点哪里,第二步输入什么,第三步等待多久。这种方式在流程固定不变时很高效,但一旦界面元素位置变化、窗口标题更改、或者出现未预料的弹窗,整个流程就会崩溃。

cua_desktop_operator_skill引入的AI Agent范式,则是一种“感知-决策-执行”的闭环。它不再依赖死板的坐标或图像模板,而是通过实时“观察”屏幕(获取屏幕截图或UI元素树),由AI模型来“理解”当前屏幕上的内容(这是哪个软件?那个蓝色的按钮是“确定”吗?输入框在哪里?),然后“决策”出下一步该做什么(移动鼠标到按钮上并点击),最后通过系统指令执行。这种模式的优势在于:

  1. 更强的鲁棒性:即使窗口位置移动了,只要AI能识别出按钮,它就能找到并点击。对于动态变化的界面适应性更强。
  2. 处理不确定性:面对未预料到的对话框或提示,一个足够聪明的AI模型有可能尝试理解并处理它,而不是直接报错停止。
  3. 自然语言驱动:理想状态下,你可以用“帮我把今天收到的邮件里所有带‘发票’附件的都下载到桌面文件夹”这样的自然语言指令来驱动,而不需要一步步编排动作。

这个工具正是这一范式的实践者。它充当了AI模型(大脑)和Windows操作系统(身体)之间的桥梁。模型负责“看”和“想”,而cua_desktop_operator_skill则负责将“想法”翻译成具体的鼠标移动、点击和键盘敲击。

2.2 “Skill”架构与MCP协议的角色

项目名中的“skill”一词非常关键。它暗示了这个工具可能遵循一种插件化或技能化的架构。在AI Agent领域,一个流行的概念是“模型上下文协议”(Model Context Protocol, MCP),它旨在标准化AI模型与外部工具(如搜索引擎、数据库、计算器)之间的交互方式。

我们可以这样理解:cua_desktop_operator_skill本身就是一个实现了“桌面操作”能力的“工具”(或称为“Skill”)。它通过标准的接口(可能是MCP,也可能是自定义的API)暴露给AI Agent。AI Agent(例如基于Claude Codex或其它LLM构建的智能体)在需要操作桌面时,不是自己生成代码,而是调用这个Skill提供的标准“操作指令”,比如move_mouse_to(x, y),click_element(button_id),type_text(“hello”)

这种设计的巨大优势在于解耦复用

  • 解耦:开发AI Agent的人不需要关心Windows API的复杂细节,只需要学会调用这套简单的操作指令。
  • 复用:任何兼容该协议或接口的AI模型,都可以立即获得完整的桌面操控能力,实现了“一次开发,多处使用”。

注意:虽然项目描述中提到“兼容不同的AI模型”,但实际集成度取决于该Skill提供的接口是否足够通用。通常,它会提供一个本地服务器,AI模型通过HTTP或WebSocket连接到它并发送JSON格式的指令。

2.3 本地化运行的安全与隐私考量

“无需网络连接即可运行任务”是该项目强调的一大亮点,也是其吸引人的核心优势之一。这意味着两件事:

  1. 隐私安全:你的所有屏幕信息、操作内容、输入的数据都只在你的电脑内存和磁盘中流转,不会上传到任何第三方服务器。这对于处理敏感信息(如财务数据、个人文件)的场景是必须的。
  2. 离线可用:即使在没有互联网的环境下,只要你的AI模型是本地部署的(如通过Ollama运行的本地LLM),整个自动化流程依然可以工作。

然而,这也带来了技术上的挑战:本地运行的AI模型,其视觉理解(VLM)或决策能力,通常弱于云端的大型模型(如GPT-4V)。因此,在实际使用中,你可能需要对任务进行更精细的设计,或准备更高质量的屏幕截图给模型,才能获得稳定的效果。

3. 从零开始:详细安装与环境配置指南

官方给出的安装步骤比较简略,在实际操作中,有几个关键细节和潜在坑点需要特别注意。下面是我在Windows 11专业版上从头搭建的完整过程。

3.1 系统准备与前置检查

虽然项目要求是Windows 10及以上,但我强烈推荐使用Windows 10 21H2或更新版本,或Windows 11。旧版本的系统可能在.NET框架、系统API权限上遇到兼容性问题。

第一步:检查并更新.NET环境许多现代的桌面自动化工具依赖.NET运行时。按下Win + R,输入cmd打开命令提示符,然后输入:

dotnet --list-runtimes

如果看到类似Microsoft.NETCore.App 6.x.x或更高版本的输出,说明环境基本OK。如果没有安装,你需要前往微软官网下载并安装最新的.NET桌面运行时或.NET SDK。我建议安装.NET 6.0或8.0的运行时,兼容性最好。

第二步:关闭不必要的安全软件实时防护的杀毒软件或Windows Defender可能会将自动化工具模拟鼠标键盘的行为误判为恶意软件或键盘记录器,从而进行拦截。在安装和首次运行时,建议暂时关闭实时保护,或者将工具的可执行文件及所在目录添加到杀毒软件的白名单中。这是后续能否顺利运行的关键。

3.2 软件包的下载与解压策略

官方提供了.exe安装程序和.zip压缩包两种方式。我的建议是:优先下载.zip压缩包

为什么?.exe安装程序虽然方便,但它通常会将文件安装到Program Files等受系统保护的目录。当你后续需要查看日志、修改配置文件或安装自定义插件时,可能会遇到权限问题。而.zip包允许你解压到任意位置,例如D:\AutomationTools\cua_desktop_operator,这样所有文件都集中在一个你有完全控制权的文件夹里,管理起来更灵活。

操作步骤:

  1. 访问项目的Release页面(通常GitHub仓库的右侧有Releases标签页)。
  2. 找到最新的版本(如v2.6),下载名称中包含skill-desktop-operator-cua-2.6.zip的文件。
  3. 在非系统盘(如D盘)创建一个新文件夹,命名为DesktopOperator
  4. 右键点击下载的zip文件,选择“全部解压缩…”,目标路径选择刚才创建的DesktopOperator文件夹。

解压后,你看到的文件结构可能类似这样:

D:\AutomationTools\cua_desktop_operator\ ├── cua-desktop-operator.exe (主程序) ├── config.json (配置文件) ├── logs/ (日志目录) ├── skills/ (可能存放其他技能插件) └── README.txt (说明文件)

3.3 首次运行与权限授予的“坑”

双击运行主程序(可能是.exe或一个批处理文件)。此时,Windows会弹出两个至关重要的安全提示:

  1. 用户账户控制(UAC):提示“你要允许此应用对你的设备进行更改吗?”。你必须点击“是”。如果点了“否”,程序可能静默失败或功能不全。
  2. 辅助功能权限:程序启动后,可能会立即触发Windows的“辅助功能”权限请求,提示“是否允许此应用访问你的电脑?”或“允许cua-desktop-operator.exe控制你的电脑?”。这个权限是核心中的核心,它允许程序以编程方式控制鼠标、键盘和读取UI信息。必须点击“是”或“允许”

实操心得:如果错过了这个弹窗,或者不小心点了拒绝,程序可能看起来在运行,但无法执行任何操作。此时,你需要手动去系统设置里授予权限。路径是:设置 -> 隐私和安全性 -> 辅助功能。在“辅助功能”页面,找到“鼠标键和键盘”或“相关设置”下的“允许应用控制你的电脑”列表,确保cua-desktop-operator.exe的开关是打开状态。有时需要重启程序或电脑后权限才能生效。

首次运行成功后,程序界面可能是一个简单的控制台窗口,显示着日志信息,或者是一个最小化的系统托盘图标。这表明Skill的后台服务已经成功启动,正在等待AI Agent的连接。

4. 核心实战:连接AI Agent并执行第一个自动化任务

安装好Skill只是准备好了“手”,我们还需要连接一个“大脑”(AI Agent)。这里我以连接一个本地运行的、支持MCP协议的Claude Codex智能体为例,演示完整流程。

4.1 配置AI Agent以连接桌面Skill

假设你已经有一个可以运行的AI Agent项目(例如基于claude-codeopenai python库构建)。关键步骤是让这个Agent知道如何与cua_desktop_operator_skill通信。

通常,Skill会作为一个本地服务器运行,暴露一个HTTP端点(如http://localhost:8080)或一个WebSocket地址。你需要查看Skill的文档或配置文件(如config.json)来确认具体的连接信息。

一个典型的config.json可能包含:

{ "server": { "host": "localhost", "port": 8192, "protocol": "ws" }, "permissions": { "mouse": true, "keyboard": true, "screen_capture": true } }

这表示Skill在localhost:8192上运行着一个WebSocket服务器。

在你的AI Agent代码中,你需要初始化一个MCP客户端(或简单的WebSocket客户端),并连接到这个地址。连接成功后,Skill会向Agent“注册”自己,告知Agent:“嗨,我现在提供了以下能力:move_mouse,click,type_text,get_screenshot…”。之后,当你的Agent逻辑判断需要操作桌面时,就可以调用这些能力。

4.2 设计并执行你的第一个自动化脚本:打开记事本并输入文字

让我们设计一个最简单的任务来验证整个流程是否打通:让AI Agent自动打开Windows记事本,并在其中输入“Hello from AI Agent!”

在你的AI Agent主逻辑中,你需要编排这样一个任务序列。伪代码如下:

# 伪代码,展示任务逻辑 async def automate_notepad_task(): # 1. 通过Skill获取当前屏幕信息(可选,用于确认桌面状态) screenshot = await desktop_skill.get_screenshot() # 2. 模拟按下Win键,打开开始菜单 await desktop_skill.press_key("win") await asyncio.sleep(0.5) # 等待开始菜单弹出 # 3. 输入“notepad”并回车 await desktop_skill.type_text("notepad") await asyncio.sleep(0.3) await desktop_skill.press_key("enter") await asyncio.sleep(2) # 等待记事本完全打开 # 4. 在记事本窗口中输入文字 await desktop_skill.type_text("Hello from AI Agent!") # 5. (可选)保存文件 await desktop_skill.press_key_combination(["ctrl", "s"]) # Ctrl+S await asyncio.sleep(1) await desktop_skill.type_text("ai_greeting.txt") # 输入文件名 await desktop_skill.press_key("enter")

执行这个任务时,请确保:

  • 你的AI Agent进程和桌面Skill进程都在运行。
  • 桌面没有其他全屏窗口遮挡。
  • 你亲眼观察整个执行过程,这是调试的第一步。

如果一切顺利,你会看到鼠标指针自己移动到屏幕左下角(或按下Win键),开始菜单弹出,自动输入“notepad”,回车后记事本启动,然后文字被逐个键入。这个过程会让人感觉非常奇妙。

4.3 超越基础操作:处理复杂交互与条件判断

简单的线性操作只是开始。真正的自动化价值体现在处理复杂场景。例如,一个常见的需求是:“如果‘文件已存在’的对话框弹出来,就点击‘替换’;如果没有,就继续。

这要求你的AI Agent具备“观察-判断-执行”的循环能力。流程如下:

  1. 执行保存操作(Ctrl+S)。
  2. 等待并检查屏幕:调用Skill的get_screenshot或更高级的find_element(如果Skill支持)功能,获取当前屏幕状态。
  3. AI视觉判断:将截图发送给你的视觉AI模型(VLM),提问:“当前屏幕上是否有标题包含‘确认’或‘文件已存在’的对话框?对话框中是否有‘替换’或‘跳过’按钮?”
  4. 决策与执行:根据AI的回答,决定下一步。
    • 如果AI说“有‘替换文件’对话框”,则调用click_element(button_id=‘替换’)move_and_click(x=按钮坐标)
    • 如果AI说“没有对话框,是记事本窗口”,则继续执行后续任务。
  5. 循环:完成点击后,再次获取屏幕状态,确认对话框已关闭,流程回到记事本窗口。

这个循环是AI驱动自动化的核心。cua_desktop_operator_skill提供了执行动作的能力,而如何精准地“观察”和“判断”,则很大程度上依赖于你所集成的AI模型的视觉理解能力。对于复杂界面,你可能需要训练一个专门的视觉模型,或者结合OCR技术来识别屏幕上的文字,以提高判断的准确性。

5. 高级技巧与性能优化实战

当你能成功运行基础任务后,接下来要考虑的是如何让它更稳定、更高效、更适应复杂场景。

5.1 提升操作稳定性的关键:等待与容错

自动化脚本失败,十有八九是因为“快”了。电脑响应速度、软件启动时间、网络延迟都会变化。硬编码的等待时间(如sleep(2))非常脆弱。

最佳实践是使用“智能等待”:

  • 基于事件的等待:如果Skill API支持,优先使用它。例如,等待某个窗口出现、某个元素可点击。这需要Skill提供查询UI状态的能力。
  • 轮询+超时:如果不支持事件,就实现一个轮询函数。例如,在点击“打开”按钮后,循环调用get_active_window_title(),直到标题变成目标窗口或超时。
  • 指数退避:在重试操作时(如点击按钮没反应),等待时间应逐渐增加(如1秒,2秒,4秒…),避免在系统卡顿时疯狂重试。

在你的Agent代码中,可以这样封装一个安全的点击函数:

async def safe_click(element_identifier, max_retries=3): for attempt in range(max_retries): try: await desktop_skill.click(element_identifier) # 点击后,等待一个简短时间,然后检查是否成功(例如,通过判断窗口变化) await asyncio.sleep(0.5) if await check_success_condition(): # 你自己定义的检查函数 return True except Exception as e: print(f"点击尝试 {attempt+1} 失败: {e}") await asyncio.sleep(2 ** attempt) # 指数退避等待 return False # 所有重试都失败

5.2 技能组合与任务编排:构建自动化工作流

cua_desktop_operator_skill是一个“桌面操作”技能。但在实际工作中,一个任务可能涉及多个系统。例如,“从邮箱下载附件,用本地软件打开分析,将结果上传到内部系统”。

这时,你需要一个“总指挥”AI Agent,它可以调度多个技能:

  1. 邮件技能:连接到你的邮箱,下载特定附件到本地。
  2. 桌面操作技能(cua_desktop_operator_skill):双击打开下载的分析软件,加载刚下载的附件文件,点击“生成报告”按钮。
  3. 文件系统技能:监控报告生成目录,找到新生成的结果文件。
  4. Web操作技能:登录内部系统,在指定表单中上传结果文件。

这个“总指挥”Agent负责维护整个工作流的状态,在步骤间传递数据(如下载的文件路径),并根据每个步骤的成功或失败决定后续流程(如重试或发送警报)。cua_desktop_operator_skill在这个生态中,完美地承担了“与本地GUI软件交互”这一关键环节。

5.3 资源监控与日志分析:让运行过程透明化

长时间运行自动化任务,必须关注资源占用和运行状态。

  • CPU/内存:运行AI模型(特别是视觉模型)和屏幕捕获可能比较耗资源。使用任务管理器观察cua-desktop-operator.exe和相关AI Agent进程的占用。如果过高,考虑降低屏幕捕获的分辨率或频率。
  • 日志:务必启用并定期查看Skill和Agent的日志文件。日志会记录每一个发送的指令、收到的响应、发生的错误。这是排查问题的第一手资料。在config.json中通常可以设置日志级别(如DEBUG, INFO, ERROR),调试时设为DEBUG,生产运行时设为ERROR或WARN以减少磁盘IO。
  • 屏幕录像:对于调试复杂的、间歇性出现的问题,没有什么比录下自动化执行过程的视频更直观的了。你可以使用Windows自带的Xbox Game Bar(Win+G)或第三方工具,在运行关键任务时进行录屏。

6. 常见问题排查与解决方案实录

在实际使用中,你几乎一定会遇到下面这些问题。这里是我踩过坑后总结的排查清单。

6.1 连接与权限类问题

问题现象可能原因解决方案
Agent连接Skill时超时或拒绝连接1. Skill服务未启动。
2. 防火墙阻止了端口连接。
3. 配置文件中的主机或端口错误。
1. 检查任务管理器,确认cua-desktop-operator.exe进程存在。
2. 临时关闭防火墙测试,或将该程序添加到防火墙白名单。
3. 核对config.json中的hostport,确保Agent连接地址与之匹配。
程序启动后无反应,或鼠标键盘无法被控制1. 辅助功能权限未授予。
2. 被杀毒软件拦截。
3. 程序以普通权限运行,但需要管理员权限。
1. 前往设置->隐私和安全性->辅助功能检查并开启权限,然后重启程序
2. 检查杀毒软件日志,添加排除项。
3. 尝试右键主程序,“以管理员身份运行”。
操作执行了,但效果不对(如点错位置)1. 屏幕缩放比例不是100%。
2. 多显示器坐标混乱。
3. AI模型识别错误。
1. 将显示设置中的“缩放与布局”调整为100%。这是许多自动化工具的硬性要求。
2. 在单显示器环境下测试,或确保Skill能正确处理多显示器坐标。
3. 检查AI模型接收的屏幕截图是否清晰完整,尝试提高截图分辨率。

6.2 自动化执行类问题

问题现象可能原因解决方案
任务中途失败,且日志报“元素未找到”或“窗口不存在”1. 前置操作太慢,窗口未及时弹出。
2. 窗口标题或类名与预期不符。
3. 屏幕状态被意外改变(如弹出通知)。
1. 在关键操作(如启动软件、点击按钮)后增加足够的等待时间,或实现智能等待。
2. 使用更通用的窗口匹配方式(如模糊匹配标题),或先用Skill获取当前所有窗口信息进行确认。
3. 确保自动化运行时,避免人为操作电脑,并关闭不必要的通知。
键盘输入乱码或输入到错误窗口1. 目标窗口未获得焦点。
2. 输入法状态不正确。
3. 键盘事件被其他软件拦截。
1. 在输入前,先调用activate_windowfocus_element确保目标窗口激活。
2. 在脚本开始时,强制将输入法切换到英文状态(模拟按下Ctrl+Space)。
3. 关闭可能拦截全局键盘事件的软件(如某些翻译软件、游戏辅助工具)。
自动化在远程桌面或锁屏后停止工作Windows安全策略限制。本地自动化工具通常无法在锁屏或非活动用户会话中操作桌面。如果需要无人值守运行,考虑使用Windows任务计划程序,并配置任务为“不管用户是否登录都要运行”,同时确保电脑保持登录状态且不锁屏(需调整电源和锁屏设置)。

6.3 性能与稳定性类问题

问题现象可能原因解决方案
运行一段时间后,操作延迟明显增加1. 内存泄漏。
2. 日志文件过大。
3. AI模型响应变慢。
1. 定期重启Skill和Agent进程。可以编写一个监控脚本,在运行若干小时后自动重启。
2. 配置日志滚动策略,定期清理旧日志。
3. 监控AI模型服务(如Ollama)的资源状态,考虑使用更轻量的模型。
屏幕捕获失败或截图全黑1. 在Secure Desktop(如UAC提权窗口)下运行。
2. 全屏独占应用(如游戏)在前台。
1. 避免自动化流程中触发需要UAC确认的操作。如果必须,需研究以系统服务方式运行。
2. 设计流程时,确保目标应用窗口化运行,而非全屏独占模式。

7. 安全边界与最佳实践建议

将桌面控制权交给一个自动化工具,安全是重中之重。以下是我总结的几条铁律:

  1. 最小权限原则:不要以Administrator或System等高权限账户日常运行此工具。创建一个标准用户账户专门用于运行自动化任务。
  2. 网络隔离:既然强调本地运行,就确保运行此工具的机器处于防火墙保护的内网中,Skill服务监听的端口(如8192)不应暴露在公网上。
  3. 操作范围限制:如果可能,在配置中限定自动化可以操作的窗口标题、进程名或屏幕区域。避免它误操作到其他关键软件(如财务系统、命令行终端)。
  4. 关键操作二次确认:对于删除文件、格式化、发送邮件等高风险操作,应在Agent逻辑中设计“二次确认”机制,例如,在执行前弹出一个自定义确认框,需要人工点击才能继续。
  5. 审计与回滚:详细记录每一个自动化任务的开始时间、执行步骤、屏幕截图(可保存为低分辨率图片)和最终结果。一旦出现问题,可以快速回溯。对于文件操作,事先做好备份。

我个人在实际使用中的体会是cua_desktop_operator_skill这类工具代表了桌面自动化向智能化演进的一个有趣方向。它并非要替代所有成熟的RPA方案,而是在灵活性、开发门槛和与AI生态的结合上,开辟了一条新路。它的稳定性严重依赖于AI模型对图形界面的理解能力,目前更适合用于定义清晰、界面相对标准的辅助性任务,或者作为探索AI与桌面交互可能性的强大实验平台。如果你对AI和自动化充满热情,愿意花时间调试和优化,它会给你带来巨大的惊喜和效率提升。最后一个小技巧:在编写复杂的自动化流程时,可以先用它来“录制”一遍你的手动操作(如果支持录制功能),生成一个基础脚本框架,然后再在此基础上加入AI决策和条件判断逻辑,这能大大降低开发成本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 5:51:06

基于Puppeteer的智能网页监控工具:实现自动化价格与内容追踪

1. 项目概述:一个能“盯梢”网页的智能助手最近在折腾AI Agent和自动化流程,发现一个挺有意思的需求:如何让机器自动帮我们盯着网页,一旦有变化就立刻通知。比如,电商商品降价了、心仪的公司发布了新职位、关注的博客更…

作者头像 李华
网站建设 2026/5/14 5:50:06

初创团队如何利用多模型聚合平台控制AI开发成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何利用多模型聚合平台控制AI开发成本 对于预算有限的初创团队而言,探索大模型应用既是机遇也是挑战。直接使…

作者头像 李华
网站建设 2026/5/14 5:49:04

基于大语言模型的AI狼人杀游戏:双层角色扮演与模型竞技场设计

1. 项目概述:当狼人杀遇上AI,一场全新的推理盛宴毕业之后,想凑齐8到12个人,在周末的晚上围坐一圈,点上外卖,来一场酣畅淋漓的狼人杀,几乎成了一种奢望。这个游戏的精髓在于社交,但剥…

作者头像 李华
网站建设 2026/5/14 5:46:04

解锁Meta智能眼镜开发者模式:实现第一视角直播与视觉AI对话

1. 项目概述:当Meta智能眼镜遇上AI,第一视角直播与视觉对话的新玩法如果你和我一样,是Meta Ray-Ban智能眼镜的早期用户,可能已经对内置的Meta AI语音助手和拍照功能玩得差不多了。眼镜本身是个很酷的“第一视角”记录设备&#xf…

作者头像 李华
网站建设 2026/5/14 5:43:00

基于Rust与egui的WSL图形化启动器:openclaw-wsl-launcher深度解析

1. 项目概述:一个为WSL设计的图形化启动器 如果你和我一样,日常开发的主力环境是Windows,但很多核心工具链、编译环境和服务器软件又离不开Linux,那么Windows Subsystem for Linux(WSL)绝对是个救星。它让…

作者头像 李华