1

Foxit Reader我的程序在新进程中通过 PDF 阅读器静默打印。

有时,我的程序会尝试同时打印两个 PDF,这会导致其中一个无法打印。

这是我的代码:

string filename = "file.pdf";

string fileDir1 = @"C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe";

Process pdfProcess = new Process();
pdfProcess.StartInfo.FileName = fileDir1;
pdfProcess.StartInfo.Arguments = string.Format(@"/t {0} {1}", filename ,"pos-80");
pdfProcess.StartInfo.CreateNoWindow = true;
pdfProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(fileDir1);
pdfProcess.Start();

if (!pdfProcess.WaitForExit(2500))
{
    pdfProcess.Kill();

}

请帮我解决这个问题。

4

1 回答 1

0

确保您已打开 Foxit。

using System.Diagnostics;

List<Process> Processlist = Process.GetProcesses().ToList();

这为您提供了当前正在运行的进程的列表。

foreach(Process p in Processlist)
{
    Console.WriteLine("Process " + p.Id + " is named '" + p.ProcessName + "'");

}

运行上述代码时,您应该会在输出窗口中看到 Foxit 进程的名称。

或者,在 foreach 行上放置一个断点并将鼠标悬停在列表上以查看所有名称。

bool IsFoxitProcessRunning = false;

foreach(Process p in Processlist)
{
    if(p.ProcessName == "Foxit process name here") //Replace with the name of the foxit process
    {
        IsFoxitProcessRunning  = true;

    }

}

现在,只有在尚未运行的情况下才启动一个新的 Foxit 进程。

if(!IsFoxitProcessRunning)
{
    //insert code to run next foxit process here.

}

笔记:

  • 您可能需要实现一个队列来跟踪等待运行的 pdf。

  • 如果 Foxit 等待超过 5 或 10 分钟才能运行,您可能还希望提醒 IT 支持。

  • 您可以选择创建Processlist一个类属性,并Timer通过调用Processlist = Process.GetProcesses().ToList();Tick 事件定期使用 刷新 Processlist。PDF 等待打印时每 30 秒左右。

于 2017-06-07T12:58:16.040 回答