刚遇到这个问题的时候,我第一反应是重装打印机驱动。卸了装,装了卸,来回折腾两遍,设置还是存不进去。点“确定”的时候一切正常,关掉窗口再打开,共享的勾又没了,打印机的图标上还挂着一个黄色感叹号。后来才搞明白,这压根不是驱动的事。
Windows里有一个东西叫Print Spooler,中文叫打印后台处理程序。你点打印之后,文件并不是直接飞向打印机,而是先扔给它,由它排队、调度、慢慢发给打印机。所以打印机相关的任何设置变更,共享也好,端口也好,默认打印机也好,都需要这个服务在正常运行。它一旦停了,你改什么都是白改。

我是按Win加R,敲了services.msc,进到服务列表里翻。Print Spooler确实停着,状态那一栏是空的。右键启动,弹出来一个错误1068,说依赖服务或组无法启动。这就不是简单停掉的问题了,是它想启动但被什么东西卡住了。
顺着“依存关系”选项卡看,Print Spooler默认只依赖RPCSS这一个服务。但有些第三方打印机驱动会偷偷往依赖列表里塞自己的东西,比如以前装过利盟或者爱普生的打印机,卸载不干净的话,注册表里会残留一个已经不存在的服务名。Spooler启动的时候找不到那个服务,就直接报1068罢工了。解决办法不复杂,打开注册表,定位到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSpooler,右边找到DependOnService这个值,双击打开。正常情况下里面只有一行RPCSS。如果多出了别的,全删掉,只留RPCSS就行。
改完注册表,保险起见我还用管理员权限跑了一条命令。cmd里输入sc config spooler depend= rpcss,回车,看到成功提示就踏实了。这条命令绕过了图形界面,直接把服务的依赖关系重置回出厂状态,比手动改注册表更干净。
不过我最早看到报错提示的时候,上面写的其实是“没有启动服务器服务”。这里的服务器服务指的其实是另一个东西,Server服务。它管的是文件和打印机共享的底层通信,如果它没开,你在打印机属性里点共享,系统根本没法把设置写进去。所以我在服务列表里找到Server,也把它启动类型改成了自动。这两个服务是两条线,但都卡住同一个功能。
还有一种情况是服务能启动,但启动完之后设置还是存不住。这个多半跟权限或者防火墙有关系。有时候Windows的RPC认证策略会拦下本地的打印共享调用,需要在注册表里把HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlPrint下面新建一个DWORD值,叫RpcAuthnLevelPrivacyEnabled,数值设成0。防火墙那边也可以给spoolsv.exe加一条入站放行规则,比直接关掉整个防火墙安全得多。
另外有一个细节容易被忽略。C盘里有一个目录叫C:WindowsSystem32spoolPRINTERS,打印任务卡住的时候文件会堆在这里,堆多了Spooler自己也会出问题。可以先把服务停掉,进去把里面的东西清空,再重新启动服务。
整个过程我花了大概二十分钟。现在打印机共享开关随便点,存完就生效,不用再反复确认了。回头想,如果一开始就去查服务状态而不是跟驱动较劲,能省不少时间。