Process.Startinfo从ASP.NET打印无法在Windows Server 2003中工作的PDF

本文关键字:2003 Server Windows 工作 PDF Startinfo ASP NET 打印 Process | 更新日期: 2023-09-27 18:21:05

我在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管理员和IIS
  2. 打印机属性>安全>大ASPNET,网络服务,每个人都可以完全访问
  3. 已尝试将另一台打印机设置为默认打印机。重新安装/添加打印机

我尝试了以上所有方法,但都没有成功。最后我在我的machine.config中尝试了下面的内容。

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

我更换了这个

processModel autoConfig="true"

用这个

processModel userName="SYSTEM"password="自动生成"

我收到这个信息

"在执行与打印相关的任务之前,您需要安装打印机"

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

Process.Startinfo从ASP.NET打印无法在Windows Server 2003中工作的PDF

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

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);

问题可能是IIS在不同的用户下运行,该用户的权限低于典型用户。请参阅System.Diagnostics.Process.Start无法从IIS 工作

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