【发布时间】:2018-10-26 18:58:45
【问题描述】:
我正在尝试从需要自动化的 C# 控制台程序打印 pdf 文档。如果我手动运行它,它工作正常,但如果我使用 Windows 10 任务计划程序,它就不起作用。我看到 Adobe Reader 在任务管理器中启动,但它没有打印出来或尝试打印。没有发生错误,它只是打开 adobe,然后在 10 秒后按预期关闭它。它不是文件的大小,因为如果直接在桌面上执行,它们都可以完美运行。它曾经可以正常工作,但自从安装了 Windows 10 功能更新版本 1803 后似乎已经停止工作,尽管我猜它也可能是 Adobe Reader 更新。以前工作时,Adobe 窗口会出现在屏幕上并消失(这不是问题),现在由于这些更新,一切都完全隐藏了,但它正在启动!显然不可能调试,因为它只在任务计划程序中,而且看起来它与实际的打印位分开工作。
c# 代码几乎是打印到 Adobe 的标准方式:
public static Boolean PrintPDFs(string pdfFileName)
{
try
{
Process proc = new Process();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
proc.StartInfo.Verb = "print";
proc.StartInfo.FileName = System.Configuration.ConfigurationManager.AppSettings["Adobe_Path"];
proc.StartInfo.Arguments = String.Format(@"/o /p /h ""{0}""", pdfFileName);
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.EnableRaisingEvents = true;
proc.Start();
if (proc.HasExited == false)
{
proc.WaitForExit(10000);
}
proc.Close();
//Abobe sometimes hangs around so we kill it!
KillAdobe("AcroRd32");
return true;
}
catch (Exception ex)
{
Log.WriteLog(ex.Message);
return false;
}
}
有人知道如何在任务计划程序下安排此工作吗?我在具有最高权限的管理员用户帐户中运行任务计划程序。
谢谢
戴夫
【问题讨论】:
-
这是微软强烈警告并断然拒绝支持的事情。打印机驱动程序在检测到问题时必须弹出自己的窗口。当打印应用程序在服务中运行时,该窗口不可见。你唯一能看到的是它只是不会完成,没有人可以点击确定。
-
它不在服务中运行,而是在控制台应用程序中运行,并且在手动执行 exe 时工作正常,只是不在任务计划程序中。
-
除了@HansPassant 所说的之外,您还试图做的是违反 Adobe Reader 最终用户许可协议。你不会得到它的支持。此外,还有更好的 PDF 命令行打印工具。
-
大声笑你们是一个很大的帮助谢谢;)有趣的是这种类型的代码是如何遍布stackoverflow的,所以为什么不尝试帮助呢!例如,如果有“更好的 PDF 命令行打印工具”,那么您是否有推荐并使用过的工具,而这可不是一笔财富!