是什么原因导致System.Drawing.Printing.PrinterSettings.InstalledPrinters抛出Win32Exception“RPC服务器不可用”?

时间:2009-04-09 15:02:29

标签: c# .net printing

我有一个我正在处理的应用程序,我允许用户在从应用程序打印表单时选择要用作打印机的打印机。我正在使用.NET 2.0

在设置屏幕中,我拨打

System.Drawing.Printing.PrinterSettings.InstalledPrinters 

获取可用打印机列表。

在客户端的计算机上,该属性抛出异常:

System.ComponentModel.Win32Exception: The RPC server is unavailable

客户端报告窗口将其打印机显示为“就绪”,客户端可以从打印机打印测试页。但是,我无法在本地重现这个问题,而且我的想法已经不多了。有没有人有什么想法会导致这个问题?任何想法或方向都会有所帮助。感谢

6 个答案:

答案 0 :(得分:5)

在Windows 7中也发生了同样的事情。在服务中停止并启动打印假脱机程序会一直修复,直到再次发生。

以下命令可以快速执行此操作:

net stop "print spooler"
net start "print spooler"

注意:以Admin身份运行命令提示符。我制作了一个批处理文件,因为它在开发过程中每天发生4-5次。

答案 1 :(得分:2)

如果可以打印,很可能是安全问题。否则我会投票给“假脱机程序服务”,但更有可能你的应用程序没有与假脱机程序服务进行通信的权利......

答案 2 :(得分:1)

RPC服务已关闭或Windows防火墙阻止它。

答案 3 :(得分:1)

我使用PrinterSettings.InstalledPrinters遇到了类似的问题 原因是应用程序以“部分信任”权限运行。

在Visual Studio中,转到Project Properties \ Security并选择“This is a full tr​​ust application”。

我不确定这是否会对你有所帮助,但对我来说是这样。

答案 4 :(得分:0)

这与网络打印机有什么关系吗? RPC是远程过程调用,也许这用于检测已安装的网络打印机?

在谷歌上搜索错误之后:

InstalledPrinters使用WMI查找打印机。 WMI轮流使用RPC。

让WMI返回您的类型的错误可能意味着以下内容:

  • MSDN Support
  • 它可能与帐户有关:检查您的应用程序的本地/网络/系统帐户,并尝试在注册帐户下运行您的应用程序(用户+密码)
  • 同时查看论坛帖子,为ASP.NET应用程序解决此问题:link

对您的问题有用WMI resource

答案 5 :(得分:0)

另一种可能性是PrintSpooler服务已设置为已禁用