如何解决Windows 10/11 删除打印机时,拒绝访问的问题
最近在删除打印机时,遇到无法删除的情况。提示无法删除,拒绝访问。
Windows 11不提供传统控制面板的管理界面(我记得以前是可以找到入口的),新式WinUI的界面烂得不行,我在点了删除设备按钮后,界面直接无反应,也没有任何提示。

我尝试直接调用PrintUIEntry命令删除,提示拒绝访问。
1 rundll32 printui.dll,PrintUIEntry /dl /n "HP Smart Tank 750 series [15D86F] (已重定向 2)"

我只能尝试用代码去删除,我编写了如下的代码
1 #include <iostream> 2 #include<Windows.h> 3 #include<tchar.h> 4 5 int main() 6 { 7 DWORD pcbNeeded = 0; 8 DWORD pcReturned = 0; 9 10 auto result = EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_NAME, NULL, 2, NULL, 0, &pcbNeeded, &pcReturned); 11 LPPRINTER_INFO_2 pPrtInfo2 = (LPPRINTER_INFO_2)LocalAlloc(LPTR, pcbNeeded); 12 result = EnumPrinters(PRINTER_ENUM_LOCAL | PRINTER_ENUM_NAME, NULL, 2, (LPBYTE)pPrtInfo2, pcbNeeded, &pcbNeeded, &pcReturned); 13 14 if (!result || pPrtInfo2 == NULL) 15 return 0; 16 17 std::wcout.imbue(std::locale("chs")); 18 19 for (int i = 0; i < pcReturned; i++) 20 { 21 LPPRINTER_INFO_2 p_curPrtInfo = pPrtInfo2 + i; 22 std::wcout << p_curPrtInfo->pPrinterName << std::endl; 23 24 //我要删除的打印机序号 25 if (i == 8) 26 { 27 HANDLE hPrinter = NULL; 28 29 PRINTER_DEFAULTSW psw{}; 30 psw.DesiredAccess = PRINTER_ALL_ACCESS; 31 OpenPrinter(p_curPrtInfo->pPrinterName, &hPrinter, &psw); 32 33 DWORD dwErr = GetLastError(); 34 35 BOOL b_DelResult = DeletePrinter(hPrinter); 36 std::cout << (b_DelResult == TRUE ? "删除成功" : "删除失败") << std::endl; 37 38 DWORD dwError = GetLastError(); 39 ClosePrinter(hPrinter); 40 } 41 } 42 return 1; 43 }
发现OpenPrinter的错误码是5,权限不足。我尝试管理员运行,还是返回5。
运行输入 printmanagement.msc ,打开打印管理。
找到需要删除的打印机,打开属性

切换到安全页

发现确实没有一个用户拥有“管理此打印机”的权限。
点击高级按钮

点击 更改,然后点击高级,在弹出的用户列表里选择Administrator(你机器上的管理员用户),点击确定

此时我们关闭打印机属性对话框,再重新打开,可以看到添加按钮已经可用了。

点击添加按钮,按前面一样的步骤,添加Administrator用户(本机上的管理员用户)

然后钩上相应的权限

此时就可以正常删除打印机了。

浙公网安备 33010602011771号