【发布时间】:2014-03-26 04:17:11
【问题描述】:
这是第 335 次问这个问题,我没有找到答案。 我正在尝试从 ASP.net C# 应用程序通过 WinSpool api 将原始数据直接发送到打印机。
我的代码只是here的副本。
此处出现错误
if( OpenPrinter( szPrinterName.Normalize(), out hPrinter, IntPtr.Zero ) )
它适用于本地打印机,但对于共享网络打印机,OpenPrinter 的结果(实际上是GetLastError 的结果)始终为5 - Access Denied。
我试过了
-
PRINTER_DEFAULTS的不同值与DesiredAccess的不同组合 - 为用户授予管理员权限
- 设置打印机like this
我必须注意,我只想打印,而不是更改打印机配置或需要管理权限的东西。
我可以使用打印机选项页面和嵌入其中的测试工具从服务器打印到此共享打印机。所以打印机工作。如何通过 API 访问它?
更新:如果从 Windows 应用程序或控制台应用程序调用,此代码看起来工作正常。那么为什么在 Web 应用程序中拒绝访问?
更新 2:问题可能是由于打印机安装在主机 PC 上并与虚拟 PC 共享(或在生产中:打印机安装在域内并共享到 DMZ 中的 PC)并且没有适当的方法授予权限到这台打印机到虚拟 PC 的用户(或域外的用户)
更新 3:还有一个事实。如果我在资源管理器中从虚拟浏览到主机 PC(例如 \\host_pc\C$),我会收到通知输入用户名和密码以访问主机 PC。如果我在此之后检查“保存密码”,整个“访问被拒绝”问题就会消失,直到我在主机 PC 上更改密码。
【问题讨论】:
-
您似乎已经回答了自己的问题。它不起作用,因为尝试打印的用户没有打印权限。您在授予权限时遇到问题,因为用户不在域中,但打印机在域中。还剩下什么?
-
您在应用程序池中使用什么身份?您所说的“授予用户管理员权限”是指哪个用户
-
我的错。我忘了说我已经尝试将应用程序池身份更改为自己。在我的帐户下,我可以从控制台打印,但不能从 Web 应用程序打印。管理员权限都没有帮助。
-
@arx 问题不在于授予权限,而实际上该权限适用于控制台应用程序,但不适用于同一用户帐户的 Web 应用程序。我相信它在某种程度上与 GUI 有关。因为网络应用程序没有使用它,所以操作系统对其安全性的处理方式不同。
-
您能否确认您是在完全信任而不是部分信任下运行 IIS?
标签: c# asp.net vb.net winapi printing