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

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

在设置屏幕中,我打电话

System.Drawing.Printing.PrinterSettings.InstalledPrinters 

获取可用打印机列表。

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

 System.ComponentModel.Win32Exception: The RPC server is unavailable 

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

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

在Windows 7中也发生了同样的事情。在服务中停止并启动打印后台处理程序,直到它再次发生。

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

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

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

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

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

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

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

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

在一些谷歌搜索错误后:

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

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

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

并为您的问题提供有用的WMI资源 。

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