【发布时间】:2015-08-03 03:48:33
【问题描述】:
过去几天我一直在努力解决这个问题,并尝试了所有建议的解决方案,包括这里的解决方案:
System.Diagnostics.Process.Start not work from an IIS
此代码(ASP.NET MVC Web 应用程序)在 IIS7(Windows 7)上完美运行。
代码只是在服务器的本地打印机(内联网)中使用 Adobe Reader 打印 PDF 文件:
// print receipt
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.FileName = acrobatReaderPath;
psInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(psInfo.FileName);
psInfo.Arguments = String.Format("/s /o /h /t \"{0}\" \"{1}\"", filePath, printerName);
psInfo.WindowStyle = ProcessWindowStyle.Hidden;
psInfo.CreateNoWindow = true;
psInfo.UseShellExecute = true;
Process process = Process.Start(psInfo);
应用程序池标识是本地特权帐户。就像我之前说的,它适用于 IIS7。
奇怪的是,我可以在任务管理器中看到后台进程已启动(AcroRd32.exe),包括用于启动它的命令行。如果我复制命令行并运行它,PDF 打印没有问题。
我有什么遗漏吗?
我知道有更好的方法可以做到这一点。也欢迎提出建议。
更新:
澄清:问题是过程未完成且 PDF 未打印。
显然问题更多的是一点点(32 对 64)。我还在调试中。
代码正在打印以下场景中的 PDF:
- Windows 7(64 位)上的 Visual Studio 2012 IIS Express
- Windows Server 2008 Standard(32 位)上的 IIS7
代码不打印以下情况下的 PDF:
- Windows 7 上的 Visual Studio 2012 IIS7(64 位)
- Windows 8.1(64 位)上的 IIS8
应用程序池正在使用管理员帐户运行,并且启用 32 位应用程序在高级设置中设置为 True。
万维网发布服务 (W3SVC) 在属性中选中了允许服务与桌面交互。
如果有人知道如何解决这个问题,请告诉我。谢谢。
【问题讨论】:
-
“不工作”不是对问题的有效描述。您遇到的确切问题是什么?如果
AcroRd32.exe已启动但未打印,则这是 Acrobat 的问题,而不是 IIS 或您的程序代码问题,应由 Adobe 支持部门处理。 -
为什么不捕获进程的输出呢?看到这个:stackoverflow.com/a/285841/1623249
-
澄清一下,问题是该过程未完成且 PDF 未打印。此外,我尝试执行一个 .bat 文件以放弃 Acrobat 的问题并得到相同的结果。我做了一些测试,捕获了 l19 建议的过程输出,并且命令被正确调用。显然该过程正在执行,但它永远不会完成。我添加了 .WaitForExit() 并且网页没有回复。你还有什么建议我可以尝试的吗?非常感谢您的帮助。
标签: c# asp.net asp.net-mvc process.start iis-8.5