我正在使用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对我来说很新鲜。感谢。
答案 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无法打开它。启动已经运行的进程不应该导致该错误。