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();
}
我试过的东西。
- 控制面板>管理服务>服务>IIS管理服务>登录选项卡>检查以与桌面交互。重置IIS管理员和IIS
- 打印机属性>安全>大ASPNET,网络服务,每个人都可以完全访问
- 已尝试将另一台打印机设置为默认打印机。重新安装/添加打印机
我尝试了以上所有方法,但都没有成功。最后我在我的machine.config中尝试了下面的内容。
- WINNT>Microsoft.NET>Framework>v2.52something>Config>machine.Config
我更换了这个
processModel autoConfig="true"
用这个
processModel userName="SYSTEM"password="自动生成"
我收到这个信息
"在执行与打印相关的任务之前,您需要安装打印机"
我使用的是acrobat7,我可以从打印机本身和acrobat软件打印测试页。
如果机器上安装了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)