2013-01-11 78 views
1

我正在使用PDFSharp创建PDF。在他们的例子中,他们保存一个PDF,然后他们开始一个过程来选择你的查看器来打开它。它看起来像这样:检测.NET上的Adobe Acrobat Reader是否正在运行

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对我来说很新。谢谢。

+0

您可以通过检查注册表来查看此链接http://stackoverflow.com/questions/969027/check-adobe-reader-is-installed-c – MethodMan

+0

>进程名称是进程的友好名称,例如作为Outlook,它不包括.exe扩展名或路径。 http://msdn.microsoft.com/en-us/library/z3w4xdc9.aspx –

+0

CPU将在50%或更多。 [对不起,也忍不住] –

回答

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未在管理员权限下运行,并且确保您的程序也是。

希望这会有所帮助!

+0

JabFreeware,不是代码假定应用程序正在运行..?如果它没有运行..怎么办?纠正我,如果我读这不正确.. – MethodMan

+0

@DJKRAZE是的,它会检测,如果它已经运行。这就是他想要的:“所以在我的测试中,我意识到如果Acrobat Reader已经打开,我会得到一个I/O异常,因为这个过程已经在运行。” – FrostyFire

+0

@DJKRAZE OP特别要求**检测Adobe在.NET上的Acrobat Reader正在运行** ...他说*运行*而不是*安装*例如,这将作为复制到http://stackoverflow.com/q/969027/28004 – balexandre

0

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

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

+0

是的,当生成的PDF仍然打开时,我收到错误。所以我试图找出一种不开始这个过程的方法。你有什么建议吗? – Crystal

+2

如果您刚刚生成PDF文件,那么它不能在Acrobat Reader中打开,因此它必须是具有句柄的代码。我认为你需要解决这个问题。你能显示生成PDF文件的代码吗? – adrianbanks

+0

OIC。我再次运行它,它在文档上展开.Save(fileName)是因为Process(对于我的Adobe Reader)已经在使用它)。所以我想我需要检查我保存的PDF是否被使用? – Crystal

相关问题