[英]Check if Adobe Acrobat Reader installed - pdf in WebBrowser control
[英]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.