【问题标题】:Process.Startinfo to print PDF not working in Windows Server 2003 from ASP.NETProcess.Startinfo 从 ASP.NET 打印 PDF 在 Windows Server 2003 中不起作用
【发布时间】:2012-01-20 07:26:29
【问题描述】:

我在 ASP.NET C# 中有以下代码,当我在调试模式下测试时,它在本地系统 + 生产机器上运行良好。但是当我上传到 IIS 时它不起作用。

ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.FileName = Server.MapPath(filePath);
                startInfo.Verb = "print";
                startInfo.Arguments = "Printer Name";
                Process proc = new Process();
                proc.StartInfo = startInfo;
                proc.Start();

                proc.WaitForExit(5000);
                if (proc.HasExited == false)
                {
                    proc.Kill();
                }

我尝试过的事情。

  1. 控制面板 > 管理服务 > 服务 > IIS 管理服务 > 登录选项卡 > 选中与桌面交互。重置 IIS Admin 和 IIS。
  2. 打印机属性 > 安全 > 大 ASPNET、网络服务,每个人都可以完全访问。
  3. 试图将另一台打印机设置为默认打印机。重新安装/添加打印机。

我尝试了以上所有方法都没有成功。最后,我在 machine.config 中尝试了以下操作。

  1. WINNT>Microsoft.NET>Framework>v2.52something>Config> machine.config

我换了这个

processModel autoConfig="true"

有了这个

processModel userName="SYSTEM" password="AutoGenerate"

我收到了这条消息

“在执行打印相关任务之前,您需要安装一个 打印机”

我使用的是 acrobat 7,我可以从打印机本身和 acrobat 软件打印测试页。

【问题讨论】:

    标签: c# asp.net printing


    【解决方案1】:

    如果您的机器上安装了 acrobat,您可以使用动词。并将打印机名称作为参数传递

    var fileName = @"c:\pdf\file.pdf";
                var startInfo = new ProcessStartInfo(fileName);
                string verbToUse = "PrintTo";
                startInfo.Verb = verbToUse;
                startInfo.Arguments = "PrinterName";
                Process p = Process.Start(startInfo);
    

    【讨论】:

    • 您必须在生产机器上安装 acrobat 阅读器。Windows 必须检测到 .pdf 扩展名是否有与之关联的 acrobat 阅读器。
    • 是的,我已经在生产机器上安装了它。实际上,我已经设法使用我在问题中发布的旧代码在生产机器上打印。帮助
    • 尝试使用“print”动词而不是“PrintTo”
    • 好吧...尝试根据本文msdn.microsoft.com/en-us/library/…中给出的示例创建一个示例控制台应用程序@
    • 您好,感谢 Shoaib,但正如我上面所说,它在调试模式下工作正常。所以即使我创建了一个示例控制台应用程序,它也可以在调试模式下工作。我认为这与 IIS 中的安全问题有关。帮助!
    【解决方案2】:

    问题可能是 IIS 在其他用户下运行,该用户的权限低于典型用户。见System.Diagnostics.Process.Start not work from an IIS

    我通过将 ProcessModel 标识更改为具有权限的用户,在我的服务器上修复了它。可能是一种解决方法和不好的做法,但它奏效了。 {应用程序池} -> 高级设置 -> 身份 -> 自定义帐户(也将加载用户配置文件切换为 true)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 2011-07-15
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 2013-06-16
      相关资源
      最近更新 更多