How can I check whether Adobe reader or acrobat is installed in the system? also how to get the version? ( In C# code )
Asked
Active
Viewed 1.9k times
13
-
5If what you actually want to do is to check if a PDF viewer is installed on the system, DON'T check for Adobe Reader. I and some of my co-workers are using Foxit Reader, which is way better than Adobe Reader. – OregonGhost Jun 09 '09 at 09:29
3 Answers
23
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);
}
}
}
}
}
}

Chuck Savage
- 11,775
- 6
- 49
- 69

abmv
- 7,042
- 17
- 62
- 100
-
2Adobe is either putting it somewhere else or my Windows8 machine has it differently, modified the above code to try find Adobe in `Software.Policies` – Chuck Savage Sep 30 '13 at 18:45
-
Is there a way to check in c# code if the installed adobe reader is up to date, or if there is a new update available? – Nada N. Hantouli Feb 03 '15 at 07:48
-
I uninstalled acrobat, but the registry is maintained, and the version (adobe variable) is not null and has the latest version. – Fabián Romo Sep 26 '20 at 15:58
9
The only solution which works for me is:
var adobePath = Registry.GetValue(
@"HKEY_CLASSES_ROOT\Software\Adobe\Acrobat\Exe", string.Empty, string.Empty);
Then I check if adobePath != null
then Adobe reader is installed.
This way I will get also the path to the acrobat reader executable.

Pinte Dani
- 1,989
- 3
- 28
- 35
8
Please also consider people running 64bit operating systems and potentially running either 32bit or 64bit versions of adobe reader.
The following code is a modified version of Abmv's posted solution, but this will check to see if 64bit versions of adobe reader are installed first before checking for 32bit versions.
Hope this makes sense! :-)
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!");
}
}
}
}

Shane Yu
- 252
- 3
- 9
-
Is there a way to check in c# code if the installed adobe reader is up to date, or if there is a new update available? – Nada N. Hantouli Feb 03 '15 at 07:47