我已经使用Interop.AcroPDFLib.dll
构建了一个WPF应用程序来查看PDF文件,问题是如果客户端计算机上的Adobe Acrobat阅读器没有安装应用程序stops working
并崩溃。
有没有办法可以预先检测Acrobat Reader的安装,然后在运行时包括对Interop.AcroPDFLib.dll
的引用另外显示错误信息?
OR
有没有更好的开源解决方案可用于在WPF中显示pdf文件?
问候。
答案 0 :(得分:1)
如果有任何app / soft。安装在Windows中,使用安装程序,它通常在控制面板中看到的已安装程序中创建一个条目(即在注册表中)。因此,您可以搜索它,因为Adobe Reader
主要位于安装程序中并检查验证Adobe reader
的安装。
答案 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 \ Adobe ....或c:\ Program Files x86 \ Adobe ....这是假设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的开源解决方案。遗憾