1

我在打印时遇到了一些问题。我编写了一个程序,当我在 Visual Studio 中运行时,它可以完美运行。调用 Print、PageSettings 和 pagePreview 的按钮可以毫无问题地完成所有操作。但是,当我从发布文件夹(在构建发布之后)运行我的程序然后单击按钮时,我收到错误消息:您的应用程序中发生了未处理的异常。如果您单击继续...等...

异常文本

System.Drawing.Printing.InvalidPrinterException: No printers are installed.

它说没有安装打印机,但事实并非如此。为什么它可以在 VS 下工作?

好的,我写了一个小程序,我在其中调用 printPreviewDialog 和 printDialog。打印由 printDocument 完成。所以,我有一个带有两个按钮的表单。

    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        e.Graphics.DrawString("Hello World", new Font("Times New Roman", 16, FontStyle.Bold), Brushes.Black, 10, 10);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        printPreviewDialog1.Document = printDocument1;
        printPreviewDialog1.ShowDialog();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        printDialog1.Document = printDocument1;
        printDialog1.ShowDialog();
    }

当我在 VS 中运行此代码时 - 一切正常,但是当我从 Release 或 Debug 文件夹运行它时,程序返回异常:没有安装打印机。我已经尝试过两台计算机和一台虚拟机,但是在任何地方我都得到了相同的结果,但有例外。

4

1 回答 1

0

要调试 ASP.NET 应用程序,您必须是运行 ASP.NET Web 服务器的计算机上的管理员,或者如果 ASP.NET 辅助进程在您的用户帐户下运行,您的姓名必须在 Debugger Users 组中。而 ASP.NET 应用程序默认作为 NetworkService 凭据运行

并且打印机通常安装在用户的配置文件中(特别是如果它是网络打印机,而不是物理连接的打印机,例如 USB 或并行电缆)。您以管理员身份登录时看到的内容并不一定意味着当其他用户登录同一台计算机时它们将可用。由于 ASP.NET 应用程序作为 NetworkService 运行,因此 Web 应用程序不太可能在那里看到打印机。

因此,为要在其上运行的 .NET 应用程序池创建一个帐户,然后为该用户提供连接到打印机或添加打印机的权限。

对于 Windows 应用程序或普通 .Net 应用程序,当您在 Visual Studio 上运行时,它以管理员权限运行,但是当您安装可执行文件并尝试访问打印机时,您可能会收到此错误,因为您运行此应用程序的用户帐户可能没有该打印机的权利

所以我建议逐步完成所有这些提到的要点

.Net 独立应用程序

  1. 请检查是否设置了默认打印机。
  2. 检查默认打印机或您想通过代码使用的任何其他打印机,它应该具有必要的权限,以便当前登录的用户可以访问它。为此,请转到打印机设置-> 选择打印机-> 右键单击​​它并打开打印机属性。在安全选项卡中,检查您运行应用程序的当前登录用户是否有权访问该打印机。
  3. 如果仍然无法正常工作,请尝试向用户“Everyone”授予权限。它应该工作。在这种情况下,安装后可能很容易找出问题所在。

ASP.NET 应用程序

  1. 在这种情况下需要澄清的第一件事是您的代码在服务器上执行,而不是在本地机器上执行。您无法通过 ASP.NET 控制用户机器上的打印。所以请检查打印机是否安装在服务器上,并且其中一台打印机被标记为默认打印机。当您在本地环境中以调试模式运行代码时,可能会在您的机器上安装打印机,但是当您将应用程序托管在其他服务器上时,该服务器上没有安装打印机。
  2. 如果是这样,请尝试将打印机设置为默认打印机
  3. 为此,请转到打印机设置-> 选择打印机-> 右键单击​​它并打开打印机属性。在安全选项卡中检查用户“网络服务”是否有权通过此打印机进行打印,如果没有,则将相关权限授予“网络服务”。

请进行这些检查,我希望解释清楚,我能够通过此为您提供必要的帮助。

于 2013-07-30T14:05:28.387 回答