我正在使用 PDFSharp 创建 PDF。在他们的示例中,他们保存 PDF,然后启动一个过程来选择查看器来打开它。它看起来像这样:
document.Save(fileName);
Process.Start(fileName);
因此,在我的测试中,我意识到如果 Acrobat Reader 已打开,我会收到 I/O 异常,因为该进程已在运行。所以我尝试关注这篇文章: Detecting a Process is already running in windows using C# .net
关于检测进程。所以我把上面的代码改成了这样:
document.Save(fileName);
if (System.Diagnostics.Process.GetProcessesByName("AcroRd32.exe").Length == 0)
{
Process.Start(fileName);
}
所以我有两个问题。
1)这不起作用。长度始终为 0,所以我想知道我是否返回了错误的进程或者找不到该进程。当我查看任务管理器时,AcroRd32.exe 是正在运行的进程的名称。
2)有更好的方法吗?我似乎将此过程硬编码到代码中,并且我不确定是否有更好的方法来捕获其他版本的 Acrobat(例如是否有 64 位版本)或其他 PDF 查看器。
抱歉,如果这是菜鸟问题。这个.NET 对我来说很新。谢谢。
最佳答案
This是一个非常好的来源,并且涵盖了您所询问的所有内容。
这是从上面的链接中获取的一些示例代码:
Process[] collectionOfProcess = Process.GetProcessesByName("AcroRd32");
if (collectionOfProcess.Length >= 1)
{
Process acrProcess = collectionOfProcess[0];
MessageBox.Show(acrProcess.MainWindowTitle);// file name of the which is opened.
MessageBox.Show("Acrobet reader running");
}
此外,我也见过一些程序无法检测到或“使用”权限高于其的进程的情况。确保 adobe reader 没有在管理员权限下运行,如果是,请确保您的程序也是如此。
希望这有帮助!
关于c# - 检测 .NET 上的 Adobe Acrobat Reader 是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269754/