Windows 10 / Windows 11 局域网打印机共享一键修复工具。 按「这台电脑是提供打印机还是使用打印机」分两套界面,点一下按钮就自动完成服务启用、 网络发现、防火墙放行、来宾访问、打印 RPC 兼容性等一系列设置,并逐项显示结果。
A WinUI 3 desktop tool that fixes LAN printer sharing problems on Windows 10 / 11 with one click, from either side (the PC that shares the printer, or the PC that connects to it).
- 两套界面按角色划分:
本机接有打印机(开放共享,让别的电脑连上来)与本机没有打印机(修复客户端,解决连不上、连上打不开)。 - 左侧导航:修复打印机共享 / 打印机信息 / 设置(设置固定在左下角);「打印机信息」 页可以查看本机装了哪些打印机、哪些已共享,以及计算机名、用户类型与 IP 地址。
- 覆盖常见故障:共享服务、网络发现、防火墙放行、密码保护的共享、SMB 来宾访问与签名、
打印 RPC 隐私认证(
0x0000011b)、驱动安装限制(0x00000740)、打印缓存与卡住的任务。 - Windows 11 24H2+ 专项:打印后台处理程序 RPC 传输、
AllowInsecureGuestAuth策略、 受保护的打印模式(WPP)。 - 可观测:修复前检测、逐项进度、每步耗时、完整日志;修改前自动备份注册表,可回滚。
- 客户端连通性诊断:填入对方电脑名或 IP,自动测试名称解析、ping、TCP 445/135、共享列表。
- 应用内自动更新:设置里「检查更新」→「立即更新并重启」,自动从 GitHub Releases 下载、校验、替换并重启,不用重新下载整个包。
- 命令行工具
psfix:detect/plan/run/version,适合批量部署与远程排查。 - 界面使用 WinUI 3(Windows App SDK 2.4 + .NET 10),自带应用图标,支持深浅色主题。
到 Releases 页面下载(Releases → 最新版本 → Assets):
| 压缩包 | 体积 | 说明 |
|---|---|---|
PrinterShareFixer-<版本>-win-x64-requires-dotnet.zip |
约 59 MB | 解压即用;首次使用需要安装 .NET 10 运行时(x64),包内附「运行前必读」与 启动程序.bat:没装运行时会用中文提示并自动打开下载页 |
发行版刻意只提供不带运行时和其他依赖的精简包(体积约为完整包的一半以下), Windows App SDK 已随程序打包,所以唯一的额外依赖就是 .NET 运行时。 系统要求:Windows 10 1809 及以上 / Windows 11,64 位(x64)。
- 解压压缩包(整个文件夹一起,不要只拷 exe)。
- 推荐双击包内的
启动程序.bat:它会先检查 .NET 10 运行时,装了就直接启动程序,没装就用中文提示并打开下载页。 直接双击PrinterShareFixer.exe也可以,运行时缺失时 Windows 会弹出「必须安装 .NET」的提示框。 - 在"用户账户控制"里选"是"(修改服务和防火墙需要管理员权限)。
- 界面第一步选这台电脑的角色,第二步选这台电脑的系统(会自动标出推荐项),点按钮开始修复。
用打印机的那台电脑连不上时,一般两台电脑各跑一次最稳妥: 接打印机的那台选"本机接有打印机",要用打印机的那台选"本机没有打印机"。
更详细的图文步骤、排查清单和常见问题见 docs/使用说明.txt。 右上角 设置 里可以看到当前版本号与每个版本的更新内容。
程序采用左侧导航,共三个入口,设置固定在最左下方:
① 修复打印机共享
- 第一步选角色:
本机接有打印机(开放共享)/本机没有打印机(连接共享); - 第二步选本机系统(Windows 10 / 11,会自动标出推荐项);
- 客户端模式可填对方电脑名或 IP,修复最后一步自动测试连通性;
- 高级选项:注册表备份、来宾访问、SMB 签名、RPC 动态端口、防火墙范围、清理打印缓存、SMB1、受保护的打印模式;
- 修复进度逐项显示,可随时取消;「系统状态检测」展开可见服务、防火墙、SMB、打印 RPC、NetBIOS 等检查结果。
② 打印机信息
- 这台电脑:计算机名、当前用户与账号类型(管理员 / 标准用户、是否已提权)、IPv4 地址, 以及每块网卡的名称、描述、IP、MAC 与速率;
- 本机打印机:列出全部打印机(含 OneNote、Print to PDF 这类虚拟打印机), 标明哪些已共享、哪些是网络连接,并显示驱动、端口与状态;
- 顶部汇总「共 N 台 / 已共享 M 台 / 网络连接 K 台」,可「刷新」或一键「打开打印机设置」。
③ 设置(最左下方)
- 版本号与运行环境;
- 检查更新 / 立即更新并重启 / 打开下载页(见下方「自动更新」);
- 各版本更新内容;
- 日志与备份目录,以及「打开日志目录 / 打开备份目录」按钮。
免安装的应用没有安装程序帮忙升级,所以更新是自己做的:
- 打开 设置 → 更新 → 检查更新(程序启动时也会每天静默检查一次,有新版本会在「设置」按钮上显示提示点)。
- 有新版本时对话框会列出该版本的更新内容,点 「立即更新并重启」。
- 程序自动完成:下载更新包 → 用 Release 里的 SHA-256 校验 → 解压到临时目录 → 启动更新程序 → 等待主程序退出 → 复制新版本、把旧版本改名备份 → 切换到新版本 → 重新启动。
细节与安全设计:
- 更新包来自本仓库的 GitHub Releases,按当前安装形态自动选择对应的 zip;
- 校验失败会删除下载的文件并报错,不会替换正在使用的程序;
- 切换失败会自动还原成旧版本,整个过程记录在
%ProgramData%\PrinterShareFixer\Logs\update-*.log; - 只替换程序目录,日志与注册表备份都在
%ProgramData%下,用户数据不受影响; - 老版本目录会保留为
<目录名>.old-<时间戳>作为回滚点,下次更新时自动清理更早的备份; - 网络受限的环境可以设置镜像:环境变量
PSF_UPDATE_MIRROR(例如https://ghproxy.net/),或直接点「打开下载页」手动下载; - 程序目录不可写(只读介质、网络共享)时会失败并提示手动更新,不会破坏现有安装。
遇到连不上、报错又看不出原因时(例如 0x00000709、0x00000040),
可以直接生成一份完整诊断报告发给别人帮忙分析:
- 界面:「修复打印机共享」页底部点 「生成诊断报告」(会按当前选的角色采集;客户端模式填上对方电脑名/IP 更完整);
- 命令行:
psfix diag --role provider(服务端)或psfix diag --role consumer --target 192.168.1.10(客户端)。
报告保存在 %ProgramData%\PrinterShareFixer\Diagnostics\diagnostic-*.txt,包含 11 个章节、40 多项查询:
| 章节 | 主要内容 |
|---|---|
| 1 操作系统与账号 | 版本/内部版本/UBR、补丁级别、账号类型、是否提权 |
| 2 网络适配器与 IP | 网卡、IPv4、网关、DNS、网络位置、完整 ipconfig /all |
| 3 服务 | 共享/打印/RPC/发现相关服务的状态与启动类型、Spooler 依赖 |
| 4 SMB 客户端 | Get-SmbClientConfiguration、当前 SMB 连接(方言/签名)、net use、已保存凭据 |
| 5 SMB 服务端 | Get-SmbServerConfiguration、会话与打开文件、SMB1 状态 |
| 6 注册表关键项 | 来宾/匿名、SMB 签名、打印 RPC 隐私认证、驱动安装限制、RPC 传输、受保护的打印模式、网络提供程序顺序 |
| 7 防火墙 | 三个配置文件、内置共享规则组统计、本工具规则明细、第三方防火墙 |
| 8 打印机/驱动/端口 | Get-Printer、Win32_Printer、驱动版本、端口、卡住的任务 |
| 9 共享与权限 | 共享列表、每个共享的访问控制、WMI 共享视图 |
| 10 安全软件 | Defender 状态、已注册杀毒软件 |
| 11 事件日志 | 打印服务、SMB 客户端/服务端、系统与应用日志中的相关错误 |
| 12 连接尝试(客户端) | 枚举对方共享、识别打印共享名、Add-Printer 尝试并输出原始错误码 |
报告结尾附「自动判断与建议」,例如会直接指出共享名含空格/中文(0x00000709 常见成因)、 RPC 隐私认证未关闭、驱动安装受限、受保护的打印模式开启等。
注意:报告包含计算机名、用户名、IP、共享名等信息,转发前请自行确认。
| 角色 | 本机 Windows 10 | 本机 Windows 11 |
|---|---|---|
| 本机接有打印机(服务端) | win10-provider |
win11-provider |
| 本机没有打印机(客户端) | win10-consumer |
win11-consumer |
两者共用的主要步骤:
| 步骤 | 说明 |
|---|---|
| 权限与系统检查 | 校验管理员权限并读取系统信息 |
| 备份注册表 | 导出将要修改的注册表分支,便于回滚 |
| 服务配置 | 服务端启用 LanmanServer/FDResPub/SSDPSRV 等;客户端只启用连接所需服务 |
| 网络位置 / NetBIOS | 网络改为"专用",启用 NetBIOS over TCP/IP |
| 防火墙 | 启用内置"文件和打印机共享"规则组,并创建 PSF-* 入站规则(SMB 445、NetBIOS、RPC 135、打印 RPC 动态端口、WSD) |
| 来宾与 SMB | 关闭"密码保护的共享"、允许 SMB 来宾登录、取消签名强制 |
| 打印兼容性 | 关闭打印 RPC 隐私认证(0x0000011b)、放宽驱动安装限制(0x00000740) |
| 复核 | 重新读取状态,给出仍需处理的项 |
服务端额外检查本机是否真的勾了共享;客户端额外清理失效打印缓存、做目标电脑连通性测试。
按 .NET / GitHub 常见约定组织(和 dotnet/runtime、aspnetcore 等仓库一致,源码放在 src/):
.
├─ src/ 源代码(不含任何可执行文件)
│ ├─ PrinterShareFixer.App/ WinUI 3 界面程序
│ ├─ PrinterShareFixer.Core/ 修复与检测逻辑(界面 / 命令行共用)
│ └─ PrinterShareFixer.Cli/ 命令行工具 psfix
├─ docs/ 文档
│ └─ 使用说明.txt 给最终用户的使用说明
├─ packaging/ 打包时附带的文件(运行前必读、启动脚本)
├─ tools/ 开发用脚本(内嵌 PowerShell 脚本语法自检等)
├─ assets/icon/ 图标母版与生成脚本
├─ .github/workflows/build.yml GitHub Actions:编译 + 产出两种发布包
├─ build.ps1 编译(输出到 build/)
├─ package.ps1 打包(输出到 release/,两种版本)
├─ preview-ui.ps1 免提权的界面预览版(开发调试用)
├─ CHANGELOG.md 更新日志(由 tools/update-changelog.ps1 生成)
├─ LICENSE MIT 许可证
└─ PrinterShareFixer.sln
build/、release/ 等产物不入库(见 .gitignore),发布包通过
GitHub Releases 或 package.ps1 提供。
需要 .NET 10 SDK(Windows 10 2004 及以上)。
# 编译(输出到 build/)
powershell -ExecutionPolicy Bypass -File .\build.ps1
# 打包出两种发布包(输出到 release/)
powershell -ExecutionPolicy Bypass -File .\package.ps1
powershell -ExecutionPolicy Bypass -File .\package.ps1 -Variant FrameworkDependent # 只打不自带运行时的版本
# 提交前自检:把源码里所有内嵌 PowerShell 脚本过一遍语法
powershell -ExecutionPolicy Bypass -File .\tools\check-scripts.ps1
# 修改更新内容后重新生成 CHANGELOG.md
powershell -ExecutionPolicy Bypass -File .\tools\update-changelog.ps1也可以在 Visual Studio 打开 PrinterShareFixer.sln(解决方案平台选 x64)。
psfix version [--markdown] # 版本号与各版本更新内容(--markdown 输出 GitHub 用格式)
psfix detect # 只读检测(--role consumer 按客户端视角,--verbose 打印日志)
psfix plan win11-consumer # 查看某个方案包含哪些动作
psfix run win11-consumer --yes --target 192.168.1.10
# 真正执行(需管理员命令行;--opt key=value 传高级选项)方案键:win10-provider / win11-provider / win10-consumer / win11-consumer。
- 日志:
%ProgramData%\PrinterShareFixer\Logs\printer-share-fix-<时间戳>.log(无写入权限时退回%LOCALAPPDATA%\PrinterShareFixer\Logs),日志里记录每个步骤的耗时。 - 备份:
%ProgramData%\PrinterShareFixer\Backups\<时间戳>\*.reg, 双击对应.reg文件即可恢复到修复前的状态。
| 报错 / 现象 | 主要原因 | 对应步骤 |
|---|---|---|
0x0000011b 无法连接到打印机 |
打印 RPC 隐私认证 | 关闭 RpcAuthnLevelPrivacyEnabled |
0x00000740 需要管理员权限安装驱动 |
PointAndPrint 驱动安装限制 | 放宽 RestrictDriverInstallationToAdministrators |
0x00000709 无法设置默认打印机 |
打印后台处理程序 / RPC 通道 | 服务配置 + 打印 RPC 兼容性 |
| 提示"不允许不安全的来宾登录" | 客户端默认拒绝来宾访问 | SMB 兼容性 + AllowInsecureGuestAuth |
| 在网络中看不到对方电脑或打印机 | 网络发现、FDResPub、防火墙 |
服务配置 + 防火墙 + 专用网络 |
能 ping 通但访问 \\电脑名 提示无权限 |
密码保护的共享 / 本地账号远程令牌 | 来宾访问策略 |
能连上但打不开 / 0x0000007c |
失效的打印缓存、卡住的打印任务 | 客户端:清理打印缓存与队列 |
连接时提示指定的网络名不再可用(0x00000040) |
到对方的旧 SMB 会话已失效,或名称还指向旧 IP(DHCP 变更、缓存未刷新) | 客户端:清理旧 SMB 连接 + 刷新 DNS / NetBIOS 缓存;并用 \\IP\共享名 验证 |
提示同一台电脑存在多重连接冲突(1219) |
到对方存在多条凭据不同的连接 | 客户端:先删掉到它的旧连接再连 |
连接时提示打印机名称无效(0x00000709),其他电脑却正常 |
共享名含空格/中文/括号或超过 32 字符;客户端残留同名打印机条目;凭据不匹配 | 服务端:把共享名改成简短英文(如 LenovoM7615);客户端:删除旧打印机条目、清理旧 SMB 连接后用 \\IP\新共享名 重连 |
| 修复后仍连不上,想知道卡在哪 | — | 客户端模式填对方电脑名,自动测试连通性 |
见 CHANGELOG.md(内容与程序内"设置 → 更新内容"完全一致)。
- 本项目使用 MIT 许可证。
- 程序会修改本机的服务、防火墙与注册表设置,请先确认已勾选"修复前备份相关注册表项"。
- 关闭"密码保护的共享""允许不安全的来宾登录"会降低局域网安全性,建议只在可信内网使用。
- 程序未做数字签名,SmartScreen 可能提示"未知发布者",选择"仍要运行"即可。