检查是否安装了 Adob​​e Acrobat Reader - WebBrowser 控件中的 pdf

问题描述

我有一个在 webbrowser 控件中显示 pdf 的应用程序,使用以下代码

webbrowser1.Navigate(filename + "#toolbar=0");

如果安装了 Adob​​e Reader 就完美了

我想在显示窗口之前检查是否安装了 Adob​​e Acrobat Reader,或者至少在尝试显示 pdf 时。

我从这里改编了以下代码Check Adobe Reader is installed (C#)?

正如评论中提到的,不幸的是,它也会标记已卸载的版本。 我也在同一篇文章中尝试了 64 位代码,但发现了我无法轻松解决错误,并且怀疑无论如何都会给出相同的结果,因为它以类似的方式简单地查看注册表。

using System;
using Microsoft.Win32;

    namespace MyApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                RegistryKey adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Adobe");
                if(null == adobe)
                {
                    var policies = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Policies");
                    if (null == policies)
                        return;
                    adobe = policies.OpenSubKey("Adobe");
                }
                if (adobe != null)
                {
                    RegistryKey acroRead = adobe.OpenSubKey("Acrobat Reader");
                    if (acroRead != null)
                    {
                        string[] acroReadVersions = acroRead.GetSubKeyNames();
                        Console.WriteLine("The following version(s) of Acrobat Reader are installed: ");
                        foreach (string versionNumber in acroReadVersions)
                        {
                            Console.WriteLine(versionNumber);
                        }
                    }
                }
            }
        }
    }

如果未加载 Adob​​e pdf Reader,则会出现打开(在任何其他已安装的阅读器中)、保存文件或取消的提示。 我希望能够拦截内容以指示 Adob​​e 的阅读器不可用。 我试过了

private void webbrowser1_Navigating(object sender,WebbrowserNavigatingEventArgs e)
        {
            string url = e.Url.ToString();
            if (url.StartsWith("res://ieframe.dll/navcancl.htm") && url.EndsWith("pdf"))
            {
                e.Cancel = true;
                MessageBox.Show("Cannot open PDF!");
            }
        }

在以下https://social.msdn.microsoft.com/Forums/en-US/46aaeecd-5317-462a-ac36-9ebb30ba90e7/load-pdf-file-using-webbrowser-control-in-windows-form-c?forum=csharpgeneral 但发现打开,保存取消事件发生在 webbrowser1_Navigating 之前。

我将不胜感激任何有关不会标记已卸载版本的可靠解决方案的帮助,或将停止打开、保存、取消提示并允许我创建消息以安装阅读器的单独解决方

谢谢

解决方法

简单的方法是使用try/catch 在尝试给出代码。 如果出现错误,Web 浏览器将给出错误,因此在捕获中说用户安装 adobe 阅读器。 这是示例

try
{
//your code goes her
}
catch(Exception ex)
{
if(ex.Message != null)
{
Console.WriteLine("Adobe Reader not Installed");
//this is where you say adobe reader is not installed
}
}