2013-04-12 13 views
6

webbrowser controlApplicationHelpの機能があります。そのwebbrowser control.pdf fileで埋められ、そのソースは.pdf fileは私たちのウェブサイトです。PDFリーダーがインストールされているか確認してください。

問題は、すべての人が自分のマシンにPDF Readerをインストールしているわけではないので、インストールされているかどうかをチェックしたいと思います。はいまたはいいえ。インターネットを検索して、 Adobe Readerがインストールされていれば、それは私が望むものではありません。マシンにどこかにPDF Readerがインストールされているかどうかを知る必要があります。

私は多分私を助けることができる次のコードを、見つけた:

public void CheckPdfReaderAvailable()  
{  
    RegistryKey key = Registry.ClassesRoot.OpenSubKey(".pdf");  
    Assert.IsNotNull(key);  
} 

私は上記のコードを見るとregistry.pdf formatを知らないが、私は」の場合、私の考えは、コードをチェックしていることですわからない。

上記のコードを使用する方法を教えてもらえますか、この問題をどのように取り除かなければならないかについての例を教えてください。

ありがとうございます!

EDIT:次の答えは私の手伝っ

https://stackoverflow.com/a/774482/1661209

この問題を解決するための別の方法は、前提条件にPDFリーダーのライトを追加して、ユーザーがインストールすることですがまず、あなたのことあなたがそれをインストールしたことを知っているので、pdf Readerを確認する必要はありません。もしあなたが彼らに道を提供したので、ヘルプ機能を使うことができないというユーザの間違いだと言えるかもしれません公開されたプロジェクトを使用して簡単にpdfリーダーをインストールします。

+0

WebBrowserコントロールでHTMLを持っていないのはなぜ?なぜ、PDFをユーザに投げて、それを処理させてみませんか? PDFビューアがインストールされていないとどうしますか? –

+0

これは私の問題です。ユーザーにPDFビューアがインストールされているかどうかを確認したいと思います。はいまたはいいえ、そうでなければ、私はヘルプリンクを利用できるようにダウンロードリンクを提供します。 – Max

+0

この回答を確認してください。多分あなたを助けたり、あなたのためのパスを開くことができます[http:// stackoverflow。コム/質問/ 6086973 /どのように缶-I-プログラムでチェックファイル、つまり、ファイル・アソシエーションが-存在-前に、重なりあっ/ 6087057#6087057] [1] [1]:HTTP ://stackoverflow.com/questions/6086973/how-can-i-programmatically-check-file-that-a-file-association-exists-before-atte/6087057#6087057 –

答えて

5

レジストリキーまたはCLSIDの値が存在しない場合、MIMEタイプは不明です。または、MIMEタイプapplication/pdfファイルを処理するデフォルトアプリケーションがありません。

+0

この行の使用方法を参照してください。チェックのためのC#で? –

+0

私の答えを参照してください –

+0

しかし、このアプローチにはキャッチがあります.Windows 10にはデフォルトでPDFを開くEdgeが付属しています(NバージョンのWindows 10がない場合は動作しません)。エッジがアプリケーション/ pdfのCLSIDとして登録されていません –

2

レジストリを直接照会することができますが、推奨される解決方法は、IQueryAssociationsインターフェイスを使用してpdfを開くために登録されたプログラムがあるかどうかを確認することです。例はpinvoke.netにあります。これは、デフォルトのアプリケーションのクラスIDを指すエントリCLSIDを持つことになります

HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/pdf

:別にあなたが次のレジストリキーを可能性の高いチェックすることができます知っているかどうかに便利であるかどうかから

0
ジョンWillemseする(Windows 10の非Nのバージョンにデフォルトのビューアとしてのエッジを認識しません)によって提案されたアプローチの

C#実装:

private bool CanOpenPDFFiles 
    { 
     get 
     { 
      bool CLSIDpresent = false; 

      try 
      { 
       using (Microsoft.Win32.RegistryKey applicationPDF = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type\application/pdf")) 
       { 
        if (applicationPDF != null) 
        { 
         var CLSID = applicationPDF.GetValue("CLSID"); 
         if (CLSID != null) 
         { 
          CLSIDpresent = true; 
         } 
        } 
       } 
      } 
      catch (Exception) 
      { 

      } 

      return CLSIDpresent; 
     } 
    } 
関連する問題