检测Acrobat安装或任何其他打开PDF的方法

时间:2011-10-08 04:42:59

标签: wpf pdf user-controls

我已经使用Interop.AcroPDFLib.dll构建了一个WPF应用程序来查看PDF文件,问题是如果客户端计算机上的Adobe Acrobat阅读器没有安装应用程序stops working并崩溃。

有没有办法可以预先检测Acrobat Reader的安装,然后在运行时包括对Interop.AcroPDFLib.dll的引用另外显示错误信息?

OR

有没有更好的开源解决方案可用于在WPF中显示pdf文件?

问候。

3 个答案:

答案 0 :(得分:1)

如果有任何app / soft。安装在Windows中,使用安装程序,它通常在控制面板中看到的已安装程序中创建一个条目(即在注册表中)。因此,您可以搜索它,因为Adobe Reader主要位于安装程序中并检查验证Adobe reader的安装。

有关参考,请参阅artice1 article2

答案 1 :(得分:1)

如果正确安装了任何支持PDF的应用,那么System.Diagnostics.Process.Start(@"C:\MyPDF.pdf");将使用您的PDF文件启动它...

对于检测,您可以在HKLM\SOFTWARE\Adobe...检查注册表中的Reader和/或Acrobat。

另一种选择是检查注册文件关联 - 如何检查此SO回答Script to associate an extension to a program

编辑 - 根据评论:

对于需要“动态”使用Interop的场景,静态添加引用并不是一个好主意......另一种方法是使用类似于以下内容的方式使用“旧式”方式进行COM:

object A = Activator.CreateInstance (Type.GetTypeFromProgId (""));
object R = Type.GetTypeFromProgId ("").InvokeMember ("MyMethodName", BindingFlags.InvokeMethod, null, A, new object[] {myParam1, myParam2});
Marshal.FinalReleaseComObject (A);

相关链接:

答案 2 :(得分:0)

检查组件服务中的GUID。通常adobe reader具有相同的COM GUID。 检查安装。它是否可用于c:\ Program Files \ Adob​​e ....或c:\ Program Files x86 \ Adob​​e ....这是假设adobe安装在该文件夹上。这是轻松的方法。 我使用以下方法搜索文件名AcroRd32.exe:

Directory.GetFiles(@"C:\", AcroRd32.exe", SearchOption.AllDirectories)

如果找到,那么你可以检查adobe reader的安装是否正常。

您可以使用Process.Start调用adobe pdf并捕获其异常然后终止其进程。 如果是抛出异常,则不会安装或损坏adobe reader。否则它已安装

例如:

try
{
Process.Start(@"c:\your program files\Adobe\Adobe.exe");
} catch
{
   throw new Exception ("adobe is not installed or error");
}

您可以通过搜索adobe reader文件自定义上述代码,然后将其传递给Process.Start参数。

我不知道使用wpf显示pdf的开源解决方案。遗憾