检测.NET上的Adobe Acrobat Reader是否正在运行

时间:2013-01-11 00:27:25

标签: c# .net

我正在使用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查看器。

对不起,如果这是noob问题。这个.NET对我来说很新鲜。感谢。

2 个答案:

答案 0 :(得分:2)

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没有在Admin权限下运行,如果确保你的程序也是如此。

希望这有帮助!

答案 1 :(得分:0)

如果您将刚刚创建的PDF文件的文件路径传递给Process.Start而不是尝试启动Acrobat Reader,Windows将使用与.pdf文件扩展名关联的默认应用程序打开PDF 。您甚至不需要知道他们安装了什么读卡器。如果未安装阅读器,Windows将提示用户选择要打开的应用程序。这是一个更好的选择,可以直接启动Acrobat Reader,因为它将使用用户首选的阅读器打开PDF文件。

如果这是您正在做的事情(我怀疑它来自问题),那么您最有可能获得IO异常,因为生成的PDF文件仍然在PDFSharp或您的代码中打开(即某些东西已锁定),意味着Acrobat Reader无法打开它。启动已经运行的进程不应该导致该错误。