Определите установку Acrobat или любой другой способ открыть PDF - PullRequest
2 голосов
/ 08 октября 2011

Я создал приложение WPF для просмотра файлов PDF, используя Interop.AcroPDFLib.dll, проблема в том, что на клиентском компьютере не установлено приложение Adobe Acrobat Reader stops working и происходит сбой.

Есть ликаким образом я могу обнаружить установку Acrobat Reader заранее, а затем во время выполнения включить ссылку на Interop.AcroPDFLib.dll в противном случае показать сообщение об ошибке?

ИЛИ

Есть ли лучшеДоступны ли решения с открытым исходным кодом для отображения PDF-файлов в WPF?

С уважением.

Ответы [ 3 ]

1 голос
/ 08 октября 2011

Если есть приложение / софт. устанавливается в Windows с помощью установщика, обычно он создает запись в Установленные программы, видимые на панели управления (т. е. в реестре). Так что вы можете искать его, так как Adobe Reader в основном входит в установщик и проверяет правильность установки Adobe reader.

Для справки см. artice1 article2

1 голос
/ 08 октября 2011

Если какое-либо приложение с поддержкой PDF установлено правильно, System.Diagnostics.Process.Start(@"C:\MyPDF.pdf"); запустите его с файлом PDF ...

Что касается обнаружения, вы можете проверить реестр на HKLM\SOFTWARE\Adobe... для Reader и / или Acrobat.

Другим вариантом будет проверка зарегистрированной ассоциации файлов - о том, как проверить этот SO-ответ Скрипт для привязки расширения к программе

РЕДАКТИРОВАТЬ - согласно комментарию:

Для сценария, в котором вам нужно «динамически» использовать 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);

Соответствующие ссылки:

0 голосов
/ 08 октября 2011

Проверка 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 в порядке или нет.

Вы можете позвонить Adobe PDFЯ использую Process.Start и фиксирую его исключение, а затем убиваю его процесс.Если это исключение броска, то 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.

Не знаю, как открытьИсходное решение для отображения PDF с использованием WPF.извините

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...