2009-06-09 3 views
11

Как проверить, установлена ​​ли программа Adobe Reader или акробат в системе? также как получить версию? (В C# код)Проверьте, установлен ли Adobe Reader (C#)?

+5

Если вы действительно хотите сделать это, проверьте, установлен ли в системе просмотрщик PDF, НЕ проверяйте Adobe Reader. Я и некоторые из моих сотрудников используют Foxit Reader, что намного лучше, чем Adobe Reader. – OregonGhost

ответ

21
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); 
        } 
       } 
      } 
     } 
    } 
} 
+2

Adobe либо помещает его где-то в другом месте, либо моя машина Windows8 имеет его по-другому, изменил приведенный выше код, чтобы попытаться найти Adobe в «Software.Policies» –

+0

работал отлично, меня на IE, Chrome и FF. –

+0

Есть ли способ проверить код C#, если установленный Adobe Reader находится в актуальном состоянии или доступно новое обновление? –

6

Пожалуйста, также рассмотреть вопрос о бегущих людей 64-разрядные операционные системы и потенциально работающих под управлением 32- или 64-разрядные версии читателя самана.

Следующий код представляет собой модифицированную версию решения Abmv, но это проверит, чтобы установить, были ли установлены 64-разрядные версии Adobe Reader, прежде чем проверять 32-разрядные версии.

Надеюсь, что это имеет смысл! :-)

using System; 
using Microsoft.Win32; 

namespace MyApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      RegistryKey software = Registry.LocalMachine.OpenSubKey("Software"); 

      if (software != null) 
      { 
       RegistryKey adobe; 

       // Try to get 64bit versions of adobe 
       if (Environment.Is64BitOperatingSystem) 
       { 
        RegistryKey software64 = software.OpenSubKey("Wow6432Node"); 

        if (software64 != null) 
         adobe = software64.OpenSubKey("Adobe"); 
       } 

       // If a 64bit version is not installed, try to get a 32bit version 
       if (adobe == null) 
        adobe = software.OpenSubKey("Adobe"); 

       // If no 64bit or 32bit version can be found, chances are adobe reader is not installed. 
       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); 
         } 
        } 
        else 
         Console.WriteLine("Adobe reader is not installed!"); 
       } 
       else 
        Console.WriteLine("Adobe reader is not installed!"); 
      } 
     } 
    } 
} 
+0

работал отлично, меня на IE, Chrome и FF. –

+0

Есть ли способ проверить код C#, если установленный Adobe Reader обновлен или доступно новое обновление? –

6

Единственное решение, которое работает для меня:

var adobePath = Registry.GetValue(
@"HKEY_CLASSES_ROOT\Software\Adobe\Acrobat\Exe", string.Empty, string.Empty); 

Затем я проверяю, если установлен adobePath != null затем Adobe Reader.

Таким образом, я получу также путь к исполняемому файлу для чтения акробатов.

Смежные вопросы