.NET Windows服务调用winspool.Drv访问被拒绝

时间:2019-06-26 06:49:59

标签: c# windows-services access-denied

我有一个用C#编写的Windows服务。是例外,当调用winspool.drv的OpenPrinter方法在局域网中打开打印机时

该问题仅出现在Windows 7(x64)上。当我在Windows 7(x64)上运行与桌面应用程序相同的服务代码时,它可以正常工作。

var deviceName = "\\ip\printername";
IntPtr hPrinter =new IntPtr();
var  DesiredAccess = PrinterAccessRights.PRINTER_ACCESS_USE | PrinterAccessRights.READ_CONTROL;
bool bRet = SpoolerApi.OpenPrinter(DeviceName, ref hPrinter, new PRINTER_DEFAULTS(DesiredAccess));

System.ComponentModel.Win32Exception (0x80004005): Access is denied

1 个答案:

答案 0 :(得分:0)

这可能是用户问题。尝试更改运行服务的用户(来自服务控制管理器),也许只是为了进行测试,您可以使服务以用户身份运行。 如果可行,您可能应该更改打印机的配置方式,以便对运行服务的用户可用,或者创建一个自定义用户以对打印机具有访问权限来运行该服务。