【问题标题】:Detect the Acrobat installation or any alternate way to open PDF检测 Acrobat 安装或任何其他打开 PDF 的方式
【发布时间】:2011-10-08 04:42:59
【问题描述】:

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

有没有办法我可以事先检测 Acrobat Reader 安装,然后在运行时包含对 Interop.AcroPDFLib.dll 的引用,否则会显示错误消息?

或

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

问候。

【问题讨论】:

  • 有什么建议和想法吗?请分享...
  • 我对 COM 互操作不太熟悉,但您的应用程序不应该只在您真正调用来自Interop.AcroPDFLib.dll 的方法之一时崩溃吗? P/Invoke 方法当然就是这种情况。

标签: wpf pdf user-controls


【解决方案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);

相关链接:

【讨论】:

  • tnx 的回复,请您在确定是否安装了 Adob​​e Acrobat 后告诉我如何在我的项目中添加对Interop.AcroPDFLib.dll 的引用
【解决方案2】:

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

参考见artice1article2

【讨论】:

    【解决方案3】:

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

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

    如果找到了,则可以检查adobe reader的安装是否正常。

    您可以使用 Process.Start 调用 adobe pdf I 并捕获其异常,然后终止其进程。 如果是抛出异常,则 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 的开源解决方案。对不起

    【讨论】:

    • -1 抱歉,这可能是最糟糕的做法。在 3+TB 硬盘驱动器的时代,搜索整个磁盘以查找可执行文件可能需要几分钟时间。此外,您应该使用 %ProgramFiles% 和 ProgramFiles(x86) 环境变量。最后,用户始终可以选择将 Adob​​e 安装在完全不同的位置。而是使用注册表,这就是它的目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2019-02-18
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多