簡體   English   中英

檢查是否安裝了任何類型的PDF Reader

[英]Check if there is any kind of PDF Reader installed

我的Application有一個Help功能,它由一個webbrowser control webbrowser control被充滿.pdf file ,對於源.pdf file是我們自己的網站。

問題是,不是每個人都會在他們的機器上安裝PDF Reader ,所以我想檢查一個是否安裝了:是或否。我搜索了互聯網,我主要看到Stackoverflow上的用戶想要檢查是否有Adobe Reader安裝,這不是我想要的。 我需要知道如果機器上安裝了PDF Reader

我找到了以下代碼,可以幫助我:

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

當我查看上面的代碼時,我的想法是代碼檢查registry是否確實知道.pdf format ,但我不確定。

有人可以告訴我如何使用上面的代碼或提供一個例子,關於我應該如何解決這個問題?

提前致謝!

編輯:

以下答案幫助了我: https//stackoverflow.com/a/774482/1661209

解決這個問題的另一種方法是將pdf reader lite添加到先決條件並讓用戶首先安裝,你不必檢查pdf Reader,因為你知道一個已安裝,如果不是您可以說用戶不能使用幫助功能是錯誤的,因為您為他們提供了一種使用已發布項目輕松安裝PDF閱讀器的方法。

除了知道與否之外,您可能會檢查以下注冊表項:

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

這將有一個條目CLSID ,它指向默認應用程序的類ID。

如果不存在注冊表項或CLSID值,則MIME類型未知,或者沒有默認應用程序來處理MIME類型application/pdf文件。

您可以直接查詢注冊表,但建議的解決方案是使用IQueryAssociations接口查看是否有注冊的程序打開pdf。 可以在pinvoke.net上找到一個例子。

John Willemse建議的方法的C#實現(不會將Edge識別為非N版Windows 10上的默認查看器):

    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;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM